Программа FieldView — API-документация
Пакет TMC Suite. Графический просмотрщик распределений электромагнитного поля в двумерной области: строит 2D/3D-поверхности и линии распределения поля, диэлектрической проницаемости (ε) и топологии блоков с использованием OpenGL. Язык документации: русский. Все сигнатуры приведены по исходникам из
src/fieldview/и общим заголовкам изsrc/Include/.
1. Назначение программы
FieldView (выходной EXE — FieldView.exe; файл проекта FldView.vcxproj, <TargetName>FieldView</TargetName>) — графический просмотрщик результатов электродинамического расчёта: строит 2D/3D-визуализации распределения поля в расчётной области, а также распределения диэлектрической проницаемости и топологии блоков.
Программа построена по схеме MFC Document/View (MDI). Каждый документ — бинарный файл распределения поля (.ex, формат TMC Suite), который содержит параметры сетки и массив значений поля. Программа умеет:
- открывать файлы распределения поля (
.ex) и топологические файлы (.tt); - строить 3D-поверхности (GL_TRIANGLES) и 2D-карты (GL_QUADS) распределения поля;
- строить линии (GL_LINE_STRIP) распределения поля по сечениям;
- отображать распределение ε по топологии;
- отображать топологию (прямоугольные, круговые, полигональные блоки: металл, магнетик, диэлектрик, входы, поглотители);
- строить оси X/Y/Z с размерными линиями и нумерацией входов;
- поворачивать сцену (мышью и командами, вокруг осей X/Y/Z);
- переносить сцену и данные, масштабировать вид (в т.ч. по одной оси);
- настраивать 20-цветную палитру для поля и ε (автоинтерполяция или ручные уровни);
- настраивать пределы Z (автоматические или ручные);
- переключаться между 2D и 3D режимами раздельно для поля, ε и топологии;
- настраивать прозрачность (blend) слоёв;
- сохранять параметры отображения в реестре (раздел приложения, ключи §5.10);
- отслеживать изменения файла и автоматически перечитывать данные (таймер
OnTimer).
Требует OpenGL: opengl32.lib, glu32.lib.
2. Состав проекта
Состав по FldView.vcxproj (секция ClCompile):
| Файл | Класс / содержимое | Назначение (кратко) |
|---|---|---|
FldView.cpp/.h |
CFldViewApp |
Класс приложения, InitInstance, шаблон документа |
MainFrm.cpp/.h |
CMainFrame |
Главное MDI-окно: тулбар, статусбар |
ChildFrm.cpp/.h |
CChildFrame |
Дочернее MDI-окно |
FldViewDoc.cpp/.h |
CFldViewDoc |
Документ: чтение бинарных данных поля (.ex), управление памятью |
FldViewView.cpp/.h |
CFldViewView |
Основной вид: вся OpenGL-отрисовка, мышь/меню, настройки (крупнейший файл проекта, ~162 КБ) |
TmcGLText.cpp/.h |
CTmcGLText |
Вывод текста через GDI + растровые операции OpenGL |
TmcBlockTpl.cpp/.h |
CTmcBlockTpl |
Чтение топологического файла (.tt), распределение ε(x,y) |
TmcBoundaryTpl.cpp/.h |
CTmcBoundaryTpl |
Границы блоков топологии (прямоугольные, круговые, полигональные) |
TmcTopSize.cpp/.h |
CTmcTopSize |
Размерные линии топологии |
TMCDialogPropet.cpp/.h |
CTMCDialogPropet |
Окно свойств (PropertySheet, 4 вкладки) |
TMCDialogPlace.cpp/.h |
CTMCDialogPlace |
Вкладка «Размещение» (оси X/Y, единицы, шрифт) |
TMCDialogField.cpp/.h |
CTMCDialogField |
Вкладка «Поле» (цветовая шкала, Z-пределы, 2D/3D, blend) |
TMCDialogEps.cpp/.h |
CTMCDialogEps |
Вкладка «Eps» (цветовая шкала ε) |
TMCDialogTopology.cpp/.h |
CTMCDialogTopology |
Вкладка «Топология» (отображение блоков) |
TmcASetColor.cpp/.h |
CTmcASetColor |
Диалог настройки 20-цветной палитры |
ColorLevelDlg.cpp/.h |
CColorLevelDlg |
Диалог ручного ввода уровней цвета |
StdAfx.cpp/.h |
— | Прекомпилированный заголовок MFC |
resource.h, FldView.rc, RES\ |
— | Ресурсы (иконки, тулбар) |
Файлы
TmcRTH_BlockList1.cpp/.hфизически лежат в каталоге, но не включены в проект (нет вClCompile). Заголовок содержит жёсткий путьz:\work\source\include\tmcrth_bolcklist.h; классCTmcRTH_BlockList1— пустая обёртка надCTmcRTH_BlockList. Мёртвый код.
Зависимости (AdditionalDependencies): opengl32.lib, glu32.lib, sfile95.lib, prepr.lib, exprint.lib, TMCIndan.lib, TMCLibError.lib.
В
TmcGLText.hудалено подключение<gl\glaux.h>: GLAUX отсутствует в современном Windows SDK, aux*-функции в коде не используются (правка портирования, см.ISSUES.md, Фаза 4).
3. Класс CFldViewApp
Назначение: класс приложения MFC.
Заголовок: FldView.h · Базовый класс: CWinApp
BOOL InitInstance()
Инициализация: AfxOleInit(), SetRegistryKey(...) (фикс бага №6 — краш CRecentFileList::Add без OLE/реестра, см. ISSUES.md), регистрация CMultiDocTemplate, создание CMainFrame, чтение MRU, восстановление положения окна.
Обработчик: afx_msg void OnAppAbout() — окно «О программе».
Пользовательские сообщения (определены в FldView.h)
| Сообщение | Значение | Смысл |
|---|---|---|
WM_USERAPPLY_PROPPLACE |
WM_USER+5 |
Применение свойств размещения |
WM_USERAPPLY_PROPTOPOL |
WM_USER+6 |
Применение свойств топологии |
WM_USERAPPLY_PROPEPS |
WM_USER+7 |
Применение свойств ε |
WM_USERAPPLY_PROPFIELD |
WM_USER+8 |
Применение свойств поля |
Диалоги свойств посылают эти сообщения виду; обработчики — §5.9.
4. Класс CFldViewDoc — документ
Назначение: чтение бинарных данных поля (.ex), хранение массива значений, отслеживание изменения файла.
Заголовок: FldViewDoc.h · Базовый класс: CDocument
4.1. Поля
| Поле | Тип | Назначение |
|---|---|---|
cError |
CTmcLibError |
Ошибки (публичное поле) |
nX / nY |
int |
Число узлов по X / Y |
dDelta |
double |
Шаг сетки |
dXmin / dYmin |
double |
Минимальные координаты |
nTCurrent |
int |
Номер временно́го шага |
dTCurrent |
double |
Текущее время |
nAccuracy |
int |
Точность (число знаков) |
pdSurface |
double* |
Массив значений поля (nY × nX) |
pfData |
FILE* |
Дескриптор открытого файла данных |
dLongUnit / csLongUnit |
double / CString |
Коэффициент и обозначение единицы длины |
dTimeUnit / csTimeUnit |
double / CString |
Коэффициент и обозначение единицы времени |
bBusy |
volatile BOOL |
Флаг занятости (чтение в процессе) |
nViews / nViewsSinchroniz |
volatile int |
Счётчики подключённых видов / синхронизированных видов |
ftLastWriteTime |
FILETIME |
Время последней записи файла |
4.2. Публичные методы
| Метод | Назначение |
|---|---|
void ReadData(void) |
Чтение .ex-файла: ReadDataParameters (заголовок) + InitAllocationArray + ReadDataArray (бинарный массив) |
double GetdZ(double dX, double dY) |
Значение поля в точке (по сетке) |
int GetNumberElement(double dX, double dY) |
Индекс элемента сетки по координатам |
double* GetpdSurface(void) |
Указатель на массив поля |
double GetdDelta(void) |
Шаг сетки |
int GetnX(void) / int GetnY(void) |
Число узлов |
double GetdXmin(void) / double GetdYmin(void) |
Начало координат |
double GetdTCurrent(void) / int GetnTCurrent(void) |
Время / номер шага |
double GetdLongUnit(void) / CString GetcsLongUnit(void) |
Единица длины |
double GetdTimeUnit(void) / CString GetcsTimeUnit(void) |
Единица времени |
BOOL IsFileRead(void) |
Файл прочитан |
BOOL IsBusy(void) / void SetBusyOn(void) / void SetBusyOff(void) |
Управление флагом занятости |
FILETIME GetLastWriteFile(void) |
Время последней записи файла (для отслеживания обновлений) |
void AddViews__(void) / void DelViews__(void) |
Регистрация/снятие вида |
void SetSynchronizationFlag(void) |
Установка флага синхронизации видов |
Переопределения MFC: OnNewDocument(), Serialize(CArchive&).
4.3. Приватные методы
| Метод | Назначение |
|---|---|
void ReadDataParameters(FILE **fp) |
Разбор текстового заголовка .ex (маркеры §11.1) |
void InitAllocationArray(void) |
Выделение pdSurface |
void ReadDataArray(FILE **fp) |
Чтение бинарного массива |
void CloseFileData(void) |
Закрытие файла |
void DeleteData(void) |
Освобождение данных |
FILETIME LastWriteTime(CString) / FILETIME LastWriteTime(char*) |
Время записи файла |
5. Класс CFldViewView — вид (OpenGL)
Назначение: вся OpenGL-отрисовка, обработка пользовательского ввода, хранение и сохранение настроек отображения.
Заголовок: FldViewView.h · Базовый класс: CScrollView
Размер: FldViewView.cpp ~162 КБ — крупнейший файл проекта.
В FldViewView.h также объявлены глобальные PutTrace/PutStatistics (вывод в статусбар, как в ядрах).
5.1. Инициализация OpenGL
| Метод | Назначение |
|---|---|
void GL_Init(void) |
Создание OpenGL-контекста (hrc), палитры, формата пикселей |
GLvoid GL_Resize(void) |
Установка viewport и матриц проекции |
void GL_Close(void) |
Уничтожение OpenGL-контекста |
BOOL bSetupPixelFormat(void) |
Выбор формата пикселей |
void CreateRGBPalette(void) |
Создание RGB-палитры (m_cPalette); возвращает void |
unsigned char ComponentFromIndex(int i, UINT nbits, UINT shift) |
Компонента цвета из индекса палитры |
Связанные поля: HGLRC hrc (контекст OpenGL), CClientDC *m_pDC, CPalette m_cPalette, CPalette *m_pOldPalette, CRect m_oldRect, float m_fRadius, BOOL m_play.
5.2. Отрисовка поля
| Метод | Назначение |
|---|---|
void DrawScene(void) |
Главная функция отрисовки (вызывает все Draw-методы) |
void DrawField(void) |
Диспетчер: 2D или 3D вариант по n2D3DFlag |
void DrawFieldSurface(void) |
3D-поверхность поля (GL_TRIANGLES) |
void DrawFieldSurface2(void) |
2D-карта поля (GL_QUADS) |
void DrawFieldLine(void) / void DrawFieldLine2(void) |
3D/2D линии поля (GL_LINE_STRIP) |
void DrawFieldCursore(void) / void DrawFieldCursore2(void) |
3D/2D курсор значения поля |
5.3. Отрисовка ε
| Метод | Назначение |
|---|---|
void DrawEps(void) |
Диспетчер Eps (по n2D3DFlag_Eps) |
void DrawEpsSurface(void) / void DrawEpsSurface2(void) |
3D/2D поверхность ε |
void DrawEpsdLine(void) / void DrawEpsdLine2(void) |
3D/2D линии ε |
5.4. Отрисовка топологии
| Метод | Назначение |
|---|---|
void DrawTopology(void) |
Диспетчер топологии (по n2D3DFlagTopology) |
void DrawTopSurface(void) / void DrawTopSurface2(void) |
3D/2D поверхность блоков |
void DrawTopdLine(void) / void DrawTopdLine2(void) |
3D/2D контуры блоков |
void DrawTopInputNum(void) / void DrawTopInputNum2(void) |
Нумерация входов (через CTmcGLText::DrawInputNum) |
void CalcnTopPolygon(void) |
Подсчёт числа полигонов топологии (nTopPolygon) |
5.5. Оси и размерные линии
| Метод | Назначение |
|---|---|
void DrawAxies(void) |
Оси X/Y/Z |
void DrawAxiesSize(void) / void DrawAxiesSizeX(void) / void DrawAxiesSizeY(void) |
Размерные линии осей |
void DrawAxiesSizeZField(void) / void DrawAxiesSizeZEps(void) |
Размерная линия Z (шкала поля / ε) |
void DrawSize(void) / void DrawSize2(void) / void DrawSize3(void) |
Размерные линии топологии (варианты) |
void PrepareBoundTplSize(void) / void PrepareBoundTplSizeToGLCoord(void) |
Подготовка размерных линий (массив pcTopSize, счётчик nTopSize) и пересчёт в координаты GL |
void VTextOut(CDC *pDC, int nX, int nY, CString cText) |
Вертикальный текст средствами GDI |
5.6. Координатные преобразования
| Метод | Назначение |
|---|---|
double XtoGLWinCoord(double x) / double XtoGLWinCoord(int j) |
X (координата или индекс столбца) → координата GL |
double YtoGLWinCoord(double y) / double YtoGLWinCoord(int i) |
Y (координата или индекс строки) → координата GL |
double ZtoGLWinCoord(double dZcurrent) |
Значение поля → координата Z в GL |
double Z_EpstoGLWinCoord(double dZcurrent) |
Значение ε → координата Z в GL |
5.7. Управление цветом
| Метод | Назначение |
|---|---|
void SetColor(double z) |
Цвет по значению поля (палитра pscSurfaceColor[20]) |
void SetColor_Eps(double z) |
Цвет по значению ε (pscSurfaceColor_Eps[20]) |
void SetColor_Cursor(double z) |
Цвет курсора |
void SetColor(COLORREF) |
Конкретный цвет |
void SetColor(COLORREF, int nBlend11) |
Цвет с прозрачностью |
void SetColornType(int nType) |
Цвет по типу блока топологии (поля scColorEps/Met/Mag/Inp/Abs) |
COLORREF* GetpscSurfaceColor(void) |
Доступ к палитре (для диалогов; публичный) |
BOOL* GetbHightColorRezolution(void) |
Доступ к флагу повышенного цветового разрешения (публичный) |
5.8. Подготовка данных
| Метод | Назначение |
|---|---|
void ReadData(void) |
Чтение данных из документа |
void PrepareData(void) |
Подготовка данных к отрисовке (массивы pdSurface, pdSurfaceX/Y, пределы) |
void ReadTpl(void) / void PrepareTpl(void) |
Чтение и подготовка топологии .tt (cBlockTpl) |
void PrepareBoundaryTpl(void) |
Подготовка границ блоков (pcBoundBlockTpl, счётчик nBoundBlockTpl) |
void SetTplFileName(void) |
Формирование имени .tt-файла (csTplFileName) |
void DeleteData(void) |
Освобождение всех данных |
int GetNumberElement(double dX, double dY) |
Индекс элемента по координатам (private) |
void SetDefaultValue(void) |
Значения настроек по умолчанию |
void WriteIniFile(void) |
Сохранение настроек (ключи §5.10) |
void PutTrace1(void) / void PutStatistics1(void) |
Вывод текущих значений в статусбар |
5.9. Обработчики сообщений
Вращение сцены: OnRotateLeft/Right/Top/Bottom, OnRotateLefty/Righty, OnRotatexn/xv, OnRotateyn/yv, OnRotatezn/zv (углы wAngleX/Y/Z).
Перенос: OnTranslateXt/Xb/Yt/Yb/Zt/Zb, OnTranslateXn/Xv/Yn/Yv/Zn/Zv (величины wTranslateX/Y/Z); перенос данных — OnTranslatedataxn/xv/yn/yv.
Стрелки: OnStrelkleft/right/up/down.
Масштабирование: OnViewZoomP/M (общее), OnViewZoomPx/Mx (по X), OnViewZoomPy/My (по Y); OnViewDefault (вид по умолчанию), OnViewProportionally (пропорциональный режим, флаг bProportionally).
Режимы отображения поля: OnFlagdrawsurface/OnFlagdrawline (поверхность/линии), OnDimension23switch (2D/3D), OnFieldL/OnFieldValue/OnFieldModul (тип величины: уровень/значение/модуль; флаги bDrawFieldValueFlag, bDrawFieldModulFlag).
Режимы ε: OnFlagdrawsurfaceeps/OnFlagdrawlineeps, OnDimension23switcheps.
Режимы топологии: OnFlagdrawsurfacetop/OnFlagdrawlinetop, OnDimension23switchtop; видимость типов блоков — OnViewTopologyBoundaryEps/Metal/Magnetic/Input/Absorber (флаги bDrawFlagEps/Metal/Magnetic/Input/Absorber).
Размерные линии: OnViewFieldSize, OnViewEpsSize, OnViewTopologyDimensionsAlonganxaxies/Alonganyaxies, OnViewTopologySizeBlock, OnViewTopologySizeLinklist.
Мышь: OnLButtonDown/Up, OnMouseMove (вращение мышью; поля cMousePoint, bIsMouseLButonDown), OnLButtonDblClk, OnRButtonDown.
Прочее: OnViewParameters (окно свойств §10.1), OnTimer(UINT_PTR nIDEvent) (опрос изменения файла и перечитывание), OnDestroy.
Сообщения от диалогов:
| Обработчик | Сообщение |
|---|---|
LRESULT OnUserApplyPropDialogPlace(WPARAM, LPARAM) |
WM_USERAPPLY_PROPPLACE |
LRESULT OnUserApplyPropDialogField(WPARAM, LPARAM) |
WM_USERAPPLY_PROPFIELD |
LRESULT OnUserApplyPropDialogEps(WPARAM, LPARAM) |
WM_USERAPPLY_PROPEPS |
LRESULT OnUserApplyPropDialogTopol(WPARAM, LPARAM) |
WM_USERAPPLY_PROPTOPOL |
LRESULT OnCloseColorLevelDialog(WPARAM, LPARAM) |
закрытие CColorLevelDlg (pcColorLevelDialog) |
Для большинства команд есть парные OnUpdate*-обработчики доступности/отметки пунктов меню.
Переопределения MFC: OnDraw, PreCreateWindow, OnPrepareDC, OnInitialUpdate, OnPreparePrinting, OnBeginPrinting, OnEndPrinting, OnUpdate.
5.10. Ключевые поля настроек и ключи сохранения
Основные группы приватных полей:
| Группа | Поля |
|---|---|
| Палитры | COLORREF pscSurfaceColor[20], pscSurfaceColor_Eps[20] |
| Цвета | scAxiesColor, scColorEps, scColorMet, scColorMag, scColorInp, scColorAbs, scBackgoundColor |
| Прозрачность | nBlend, nBlend_Eps, nBlendTopology |
| 2D/3D | n2D3DFlag, n2D3DFlag_Eps, n2D3DFlagTopology |
| Пределы | dXmin/dXmax/dYmin/dYmax, dZmin/dZmax, dZmin_Eps/dZmax_Eps |
| Сцена | wAngleX/Y/Z, wTranslateX/Y/Z, dXkoefProp, dYkoefProp |
| Данные | nX, nY, dDelta, pdSurface, pdSurface_Eps, pdSurfaceX, pdSurfaceY |
| Топология | pnTopType, pdTopX1..X4, pdTopY1..Y4, pdTopXinp/Yinp, nTopPolygon, nBoundBlockTpl, pcBoundBlockTpl, pcTopSize, nTopSize, dZtopol, dZtopolStrelk, nInputNum |
| Флаги отображения | bDrawFlag, bDrawSurfaceFlag(_Eps), bDrawLineFlag(_Eps), bDrawFlagTopology, bDrawSurfaceFlagTopology, bDrawLineFlagTopology, bDrawFlagAxies*, bXsizeFlag/bYsizeFlag/bZsizeFlag(_Eps), bTopologySizeFlag(LinkList), bDrawFieldValueFlag, bDrawFieldModulFlag, bHightColorRezolution, bProportionally |
| Вспомогательные | lfAxiesFont (шрифт осей), pcGLText (CTmcGLText*), cBlockTpl (CTmcBlockTpl), cError, bBusy, nPropertyPageInd, pcColorLevelDialog, dDrawFieldValueX/Y, nDrawFieldValue1..5 |
Настройки сохраняются (WriteIniFile) под именами-константами TMC_GROFLD_*_INI из FldViewView.h — раздел #TMC_GraphicsOutputFieldFile, параметры: DrFl (флаги отрисовки), DrFlSurface, DrFlLine, DrFlAxies, FlXSize/FlYSize/FlZSize, Fl23D, Blend, Xmin/Xmax/Ymin/Ymax/Zmin/Zmax, XAngle/YAngle/ZAngle, XTranslate/YTranslate/ZTranslate, ColorAxies, FontAxies, FontNameAxies, ColorZField, ColorZEps, Dr_FlAxiesSize, Topology, TopologyColor_EpsMetMagInp, PropertyPageNumber, ColorResolution, EpsParam, DrawFieldModulFlag, #INIWND (окно).
6. Класс CTmcGLText — OpenGL-текст
Назначение: вывод текста в OpenGL-сцену: строка рендерится в GDI-битмап, который выводится растровой операцией OpenGL.
Заголовок: TmcGLText.h · Базовый класс: CWnd
Публичные методы
| Метод | Назначение |
|---|---|
void DrawString(char *ch, double x, double y, double z) |
Строка в точке (x, y, z) сцены |
void DrawString(CString cs, double x, double y, double z) |
То же для CString |
void DrawInputNum(int n, double x, double y, double z) |
Номер входа («Inp N») |
void SetColor(COLORREF scColorRef1) |
Цвет текста |
void SetColorSize(void) |
Цвет размерных линий |
void SetColorInput(void) |
Цвет номеров входов |
void SetFont(LOGFONT *plf1) |
Шрифт |
Приватные элементы
| Элемент | Назначение |
|---|---|
unsigned char* getGLmonoBits(HDC hDC, HBITMAP hBmp, int *size) |
Преобразование GDI-битмапа в моно-битмап для glBitmap |
unsigned char* createStringBitmapFont(HDC hDC, char *str, PSIZEL size1) |
Растеризация строки выбранным шрифтом |
void getBitmap(BITMAP *bmp, LONG width, LONG height) |
Параметры битмапа |
int nBlend, COLORREF scColorRef, HFONT hFont, LOGFONT lf, SIZE size |
Текущее состояние |
7. Класс CTmcBlockTpl — чтение топологии
Назначение: чтение топологического файла (.tt) и распределения ε(x,y).
Заголовок: TmcBlockTpl.h · Базовый класс: CTmcRTH_BlockList (TMCIndan)
Публичные методы
| Метод | Назначение |
|---|---|
void Read(CString csTplFileName1, CTmcLibError &cError1) |
Чтение .tt-файла |
int GetnX(void) |
Число узлов по X |
double* GetpdSurface(void) |
Массив ε(x,y) |
CString GetTplFileName(void) / void SetTplFileName(CString&) |
Имя файла |
CTmcLibError& GetError(void) |
Ошибки |
void DeleteData(void) |
Очистка |
Приватные: void InitAllocationArray(void), void ReadData(void); поля nTCurrent, dTCurrent, dDelta, dXmin, dYmin, nX, nY, pdSurface (распределение ε), csTplFileName, cError.
8. Класс CTmcBoundaryTpl — границы блоков
Назначение: представление границ одного блока топологии для отрисовки контуров и размерных линий.
Заголовок: TmcBoundaryTpl.h — обычный C++-класс (наследование от CWnd закомментировано).
Публичные методы
| Метод | Назначение |
|---|---|
void SetBlockList(CTmcRTH_BlockList *pcBlList, CTmcLibError &cError, double dDelta) |
Построение границ по описанию блока; внутри ветвится по типу: SetRectStat, SetCircleStat, SetPolygonStat, SetInputX, SetInputY (private) |
int GetnType(void) / int GetnBlock(void) / int GetnPoint(void) |
Тип блока, номер, число точек контура |
CString GetcsBlock(void) / CString GetcsEpsExpr(void) |
Ключевое слово блока, выражение ε |
double GetdX0(void) / double GetdY0(void) |
Координаты привязки |
double* GetpdX1..X4(void) / double* GetpdY1..Y4(void) |
Массивы координат вершин контура (по 4 угла на сегмент) |
CTmcTopSize* GetpcTopSize(void) / int GetnTopSize(void) |
Размерные линии блока и их число |
CTmcTopSize& GetcTopSizeX0(void) / GetcTopSizeY0(void) |
Размерные линии привязки (link list) по X и Y |
void SetnInputNum(int n) / int GetnInputNum(void) |
Номер входа |
Приватные: TranslateX0Y0(), DeleteData(); поля nInputNum, nTopSize, cTopSizeLinklListX0/Y0, pcTopSize, dX0/dY0, nBlock, csBlock, csEpsExpr, pX1..pX4, pY1..pY4, nPoint, nType.
9. Класс CTmcTopSize — размерная линия
Заголовок: TmcTopSize.h · Базовый класс: CWnd
| Метод | Назначение |
|---|---|
void SetdX1/SetdX2/SetdY1/SetdY2(double r) |
Координаты начала/конца линии |
double GetdX1/GetdX2/GetdY1/GetdY2(void) |
Чтение координат |
void SetdSize(double r) / double GetdSize(void) |
Числовое значение размера |
void SetcsSize(CString &csr) / CString GetcsSize(void) |
Текст размера |
void TranslateX0Y0(double dX0, double dY0) |
Смещение линии |
CTmcTopSize& operator=(CTmcTopSize&) |
Присваивание |
void DeleteData(void) |
Очистка |
10. Диалоги
10.1. CTMCDialogPropet — окно свойств
Базовый класс: CPropertySheet. 4 вкладки: «Размещение» (CTMCDialogPlace), «Поле» (CTMCDialogField), «Eps» (CTMCDialogEps), «Топология» (CTMCDialogTopology). По кнопке Apply вкладки шлют виду сообщения WM_USERAPPLY_PROP* (§3).
10.2. CTMCDialogPlace — вкладка «Размещение»
Оси X/Y, единицы длины/времени, шрифт осей, пропорциональное отображение.
10.3. CTMCDialogField — вкладка «Поле»
Цветовая шкала (20 цветов), пределы Z (авто/ручные), 2D/3D, blend, тип отображаемой величины (L / Value / Modul).
10.4. CTMCDialogEps — вкладка «Eps»
Цветовая шкала ε, пределы Z, 2D/3D, blend.
10.5. CTMCDialogTopology — вкладка «Топология»
Видимость блоков по типам (диэлектрик/металл/магнетик/вход/поглотитель), цвета, поверхность/линии, 2D/3D.
10.6. CTmcASetColor — настройка палитры
Настройка 20-цветной палитры с автоинтерполяцией между опорными цветами.
10.7. CColorLevelDlg — уровни цвета
Ручной ввод 20 значений уровней цветовой шкалы; о закрытии сообщает виду (OnCloseColorLevelDialog).
11. Форматы входных файлов
11.1. Бинарный файл поля (.ex)
Маркеры заголовка — константы TMC_GROFLD_DOCFILE_* из общего заголовка src/Include/Tmcgrviw.h (строки 101–111):
#TMC_GraphicsOutputFieldFile FormVer2.0 2000
#TMCGROFLD_nT <nT>
#TMCGROFLD_Time <T>
#TMCGROFLD_Delta <Delta>
#TMCGROFLD_Xmin <Xmin>
#TMCGROFLD_Ymin <Ymin>
#TMCGROFLD_Accuracy <Accuracy>
#TMCGROFLD_LongUnit <unit>
#TMCGROFLD_TimeUnit <unit>
#TMCGROFLD_nX <nX>
#TMCGROFLD_nY <nY>
<двоичные данные: nY × nX значений>
11.2. Топологический файл (.tt)
Создаётся счётным ядром (TMCIndan: csFileNameTopology.Format("%s.tt", ...)). Структура:
#TMC_TopologyOutputFile FormVer2.0 2000
#BlockListBegin
<блоки топологии>
#BlockListEnd
<параметры поля>
<двоичные данные>
11.3. Типы блоков топологии (nType)
Константы из src/Include/Tmcgrviw.h (используются SetColornType):
| Константа | Значение | Смысл |
|---|---|---|
CTMCRTH_BLCKNTYPE_EPS |
0 | Диэлектрик |
CTMCRTH_BLCKNTYPE_ABSORBER |
100 | Поглотитель |
CTMCRTH_BLCKNTYPE_METAL |
101 | Металл |
CTMCRTH_BLCKNTYPE_INPXLEFT |
102 | Вход X слева |
CTMCRTH_BLCKNTYPE_INPXRIGHT |
103 | Вход X справа |
CTMCRTH_BLCKNTYPE_INPYTOP |
104 | Вход Y сверху |
CTMCRTH_BLCKNTYPE_INPYBOT |
105 | Вход Y снизу |
CTMCRTH_BLCKNTYPE_MAGNETIC |
107 | Магнетик |
Дополнительно определены варианты поглотителя CTMCRTH_BLCKNTYPE_ABSR_0000..1111 (значения 1–16) и ABSR_1111_1..4 (21–24) — кодировка сторон поглощения битовой маской
The FieldView program — API documentation
TMC Suite package. A graphical viewer of electromagnetic-field distributions in a two-dimensional area: it builds 2D/3D surfaces and lines of the field distribution, the permittivity (ε) and the block topology using OpenGL. All signatures are taken from the sources in
src/fieldview/and the shared headers fromsrc/Include/.
1. Purpose of the program
FieldView (the output EXE — FieldView.exe; the project file FldView.vcxproj,
<TargetName>FieldView</TargetName>) is a graphical viewer of electrodynamic-computation
results: it builds 2D/3D visualizations of the field distribution in the computation
area, as well as of the permittivity distribution and the block topology.
The program is built on the MFC Document/View (MDI) scheme. Each document is a binary
field-distribution file (.ex, the TMC Suite format) that contains the grid parameters
and the array of field values. The program can:
- open field-distribution files (
.ex) and topology files (.tt); - build 3D surfaces (GL_TRIANGLES) and 2D maps (GL_QUADS) of the field distribution;
- build lines (GL_LINE_STRIP) of the field distribution by cross-sections;
- display the ε distribution over the topology;
- display the topology (rectangular, circular, polygonal blocks: metal, magnetic, dielectric, inputs, absorbers);
- build the X/Y/Z axes with dimension lines and input numbering;
- rotate the scene (with the mouse and commands, around the X/Y/Z axes);
- translate the scene and the data, scale the view (including along a single axis);
- configure the 20-color palette for the field and ε (auto-interpolation or manual levels);
- configure the Z limits (automatic or manual);
- switch between the 2D and 3D modes separately for the field, ε and topology;
- configure the transparency (blend) of the layers;
- save the display parameters in the registry (the application key, the keys of §5.10);
- track file changes and automatically re-read the data (the timer
OnTimer).
Requires OpenGL: opengl32.lib, glu32.lib.
2. Project composition
The composition by FldView.vcxproj (the ClCompile section):
| File | Class / contents | Purpose (briefly) |
|---|---|---|
FldView.cpp/.h |
CFldViewApp |
The application class, InitInstance, the document template |
MainFrm.cpp/.h |
CMainFrame |
The main MDI window: toolbar, status bar |
ChildFrm.cpp/.h |
CChildFrame |
The child MDI window |
FldViewDoc.cpp/.h |
CFldViewDoc |
The document: reading the binary field data (.ex), memory management |
FldViewView.cpp/.h |
CFldViewView |
The main view: all the OpenGL drawing, mouse/menu, settings (the largest file of the project, ~162 KB) |
TmcGLText.cpp/.h |
CTmcGLText |
Text output via GDI + OpenGL raster operations |
TmcBlockTpl.cpp/.h |
CTmcBlockTpl |
Reading the topology file (.tt), the ε(x,y) distribution |
TmcBoundaryTpl.cpp/.h |
CTmcBoundaryTpl |
The boundaries of the topology blocks (rectangular, circular, polygonal) |
TmcTopSize.cpp/.h |
CTmcTopSize |
The topology dimension lines |
TMCDialogPropet.cpp/.h |
CTMCDialogPropet |
The properties window (PropertySheet, 4 tabs) |
TMCDialogPlace.cpp/.h |
CTMCDialogPlace |
The "Place" tab (the X/Y axes, units, font) |
TMCDialogField.cpp/.h |
CTMCDialogField |
The "Field" tab (the color scale, Z limits, 2D/3D, blend) |
TMCDialogEps.cpp/.h |
CTMCDialogEps |
The "Eps" tab (the ε color scale) |
TMCDialogTopology.cpp/.h |
CTMCDialogTopology |
The "Topology" tab (block display) |
TmcASetColor.cpp/.h |
CTmcASetColor |
The 20-color palette configuration dialog |
ColorLevelDlg.cpp/.h |
CColorLevelDlg |
The manual color-level input dialog |
StdAfx.cpp/.h |
— | The MFC precompiled header |
resource.h, FldView.rc, RES\ |
— | Resources (icons, toolbar) |
The files
TmcRTH_BlockList1.cpp/.hphysically lie in the directory but are not included in the project (absent fromClCompile). The header contains the hard-coded pathz:\work\source\include\tmcrth_bolcklist.h; the classCTmcRTH_BlockList1is an empty wrapper overCTmcRTH_BlockList. Dead code.
Dependencies (AdditionalDependencies): opengl32.lib, glu32.lib, sfile95.lib,
prepr.lib, exprint.lib, TMCIndan.lib, TMCLibError.lib.
In
TmcGLText.hthe include<gl\glaux.h>was removed: GLAUX is absent from the modern Windows SDK, the aux* functions are not used in the code (a porting fix, seeISSUES.md, Phase 4).
3. The CFldViewApp class
Purpose: the MFC application class.
Header: FldView.h · Base class: CWinApp
BOOL InitInstance()
Initialization: AfxOleInit(), SetRegistryKey(...) (the fix for bug #6 — the
CRecentFileList::Add crash without OLE/registry, see ISSUES.md), registering
CMultiDocTemplate, creating CMainFrame, reading the MRU, restoring the window
position.
Handler: afx_msg void OnAppAbout() — the "About" window.
User messages (defined in FldView.h)
| Message | Value | Meaning |
|---|---|---|
WM_USERAPPLY_PROPPLACE |
WM_USER+5 |
Applying the placement properties |
WM_USERAPPLY_PROPTOPOL |
WM_USER+6 |
Applying the topology properties |
WM_USERAPPLY_PROPEPS |
WM_USER+7 |
Applying the ε properties |
WM_USERAPPLY_PROPFIELD |
WM_USER+8 |
Applying the field properties |
The properties dialogs send these messages to the view; the handlers — §5.9.
4. The CFldViewDoc class — the document
Purpose: reading the binary field data (.ex), storing the array of values, tracking
file changes.
Header: FldViewDoc.h · Base class: CDocument
4.1. Fields
| Field | Type | Purpose |
|---|---|---|
cError |
CTmcLibError |
Errors (a public field) |
nX / nY |
int |
The number of nodes along X / Y |
dDelta |
double |
The grid step |
dXmin / dYmin |
double |
The minimum coordinates |
nTCurrent |
int |
The time-step number |
dTCurrent |
double |
The current time |
nAccuracy |
int |
The accuracy (the number of digits) |
pdSurface |
double* |
The array of field values (nY × nX) |
pfData |
FILE* |
The handle of the open data file |
dLongUnit / csLongUnit |
double / CString |
The factor and designation of the length unit |
dTimeUnit / csTimeUnit |
double / CString |
The factor and designation of the time unit |
bBusy |
volatile BOOL |
The busy flag (a read is in progress) |
nViews / nViewsSinchroniz |
volatile int |
The counters of attached views / synchronized views |
ftLastWriteTime |
FILETIME |
The last write time of the file |
4.2. Public methods
| Method | Purpose |
|---|---|
void ReadData(void) |
Reading the .ex file: ReadDataParameters (the header) + InitAllocationArray + ReadDataArray (the binary array) |
double GetdZ(double dX, double dY) |
The field value at a point (by the grid) |
int GetNumberElement(double dX, double dY) |
The grid-element index by coordinates |
double* GetpdSurface(void) |
A pointer to the field array |
double GetdDelta(void) |
The grid step |
int GetnX(void) / int GetnY(void) |
The number of nodes |
double GetdXmin(void) / double GetdYmin(void) |
The origin |
double GetdTCurrent(void) / int GetnTCurrent(void) |
The time / step number |
double GetdLongUnit(void) / CString GetcsLongUnit(void) |
The length unit |
double GetdTimeUnit(void) / CString GetcsTimeUnit(void) |
The time unit |
BOOL IsFileRead(void) |
The file is read |
BOOL IsBusy(void) / void SetBusyOn(void) / void SetBusyOff(void) |
Managing the busy flag |
FILETIME GetLastWriteFile(void) |
The last write time of the file (for tracking updates) |
void AddViews__(void) / void DelViews__(void) |
Registering/unregistering a view |
void SetSynchronizationFlag(void) |
Setting the view-synchronization flag |
MFC overrides: OnNewDocument(), Serialize(CArchive&).
4.3. Private methods
| Method | Purpose |
|---|---|
void ReadDataParameters(FILE **fp) |
Parsing the .ex text header (the markers of §11.1) |
void InitAllocationArray(void) |
Allocating pdSurface |
void ReadDataArray(FILE **fp) |
Reading the binary array |
void CloseFileData(void) |
Closing the file |
void DeleteData(void) |
Freeing the data |
FILETIME LastWriteTime(CString) / FILETIME LastWriteTime(char*) |
The write time of the file |
5. The CFldViewView class — the view (OpenGL)
Purpose: all the OpenGL drawing, handling user input, storing and saving the display
settings.
Header: FldViewView.h · Base class: CScrollView
Size: FldViewView.cpp ~162 KB — the largest file of the project.
FldViewView.h also declares the global PutTrace/PutStatistics (output to the status
bar, as in the kernels).
5.1. OpenGL initialization
| Method | Purpose |
|---|---|
void GL_Init(void) |
Creating the OpenGL context (hrc), the palette, the pixel format |
GLvoid GL_Resize(void) |
Setting the viewport and the projection matrices |
void GL_Close(void) |
Destroying the OpenGL context |
BOOL bSetupPixelFormat(void) |
Choosing the pixel format |
void CreateRGBPalette(void) |
Creating the RGB palette (m_cPalette); returns void |
unsigned char ComponentFromIndex(int i, UINT nbits, UINT shift) |
A color component from a palette index |
Related fields: HGLRC hrc (the OpenGL context), CClientDC *m_pDC, CPalette
m_cPalette, CPalette *m_pOldPalette, CRect m_oldRect, float m_fRadius, BOOL
m_play.
5.2. Field drawing
| Method | Purpose |
|---|---|
void DrawScene(void) |
The main drawing function (calls all the Draw methods) |
void DrawField(void) |
A dispatcher: the 2D or 3D variant by n2D3DFlag |
void DrawFieldSurface(void) |
The 3D field surface (GL_TRIANGLES) |
void DrawFieldSurface2(void) |
The 2D field map (GL_QUADS) |
void DrawFieldLine(void) / void DrawFieldLine2(void) |
The 3D/2D field lines (GL_LINE_STRIP) |
void DrawFieldCursore(void) / void DrawFieldCursore2(void) |
The 3D/2D field-value cursor |
5.3. ε drawing
| Method | Purpose |
|---|---|
void DrawEps(void) |
The Eps dispatcher (by n2D3DFlag_Eps) |
void DrawEpsSurface(void) / void DrawEpsSurface2(void) |
The 3D/2D ε surface |
void DrawEpsdLine(void) / void DrawEpsdLine2(void) |
The 3D/2D ε lines |
5.4. Topology drawing
| Method | Purpose |
|---|---|
void DrawTopology(void) |
The topology dispatcher (by n2D3DFlagTopology) |
void DrawTopSurface(void) / void DrawTopSurface2(void) |
The 3D/2D block surface |
void DrawTopdLine(void) / void DrawTopdLine2(void) |
The 3D/2D block contours |
void DrawTopInputNum(void) / void DrawTopInputNum2(void) |
The input numbering (via CTmcGLText::DrawInputNum) |
void CalcnTopPolygon(void) |
Counting the number of topology polygons (nTopPolygon) |
5.5. Axes and dimension lines
| Method | Purpose |
|---|---|
void DrawAxies(void) |
The X/Y/Z axes |
void DrawAxiesSize(void) / void DrawAxiesSizeX(void) / void DrawAxiesSizeY(void) |
The axis dimension lines |
void DrawAxiesSizeZField(void) / void DrawAxiesSizeZEps(void) |
The Z dimension line (the field / ε scale) |
void DrawSize(void) / void DrawSize2(void) / void DrawSize3(void) |
The topology dimension lines (variants) |
void PrepareBoundTplSize(void) / void PrepareBoundTplSizeToGLCoord(void) |
Preparing the dimension lines (the array pcTopSize, the counter nTopSize) and converting to GL coordinates |
void VTextOut(CDC *pDC, int nX, int nY, CString cText) |
Vertical text via GDI |
5.6. Coordinate transformations
| Method | Purpose |
|---|---|
double XtoGLWinCoord(double x) / double XtoGLWinCoord(int j) |
X (coordinate or column index) → a GL coordinate |
double YtoGLWinCoord(double y) / double YtoGLWinCoord(int i) |
Y (coordinate or row index) → a GL coordinate |
double ZtoGLWinCoord(double dZcurrent) |
A field value → the Z coordinate in GL |
double Z_EpstoGLWinCoord(double dZcurrent) |
An ε value → the Z coordinate in GL |
5.7. Color management
| Method | Purpose |
|---|---|
void SetColor(double z) |
The color by a field value (the palette pscSurfaceColor[20]) |
void SetColor_Eps(double z) |
The color by an ε value (pscSurfaceColor_Eps[20]) |
void SetColor_Cursor(double z) |
The cursor color |
void SetColor(COLORREF) |
A specific color |
void SetColor(COLORREF, int nBlend11) |
A color with transparency |
void SetColornType(int nType) |
The color by the topology block type (the fields scColorEps/Met/Mag/Inp/Abs) |
COLORREF* GetpscSurfaceColor(void) |
Access to the palette (for the dialogs; public) |
BOOL* GetbHightColorRezolution(void) |
Access to the high-color-resolution flag (public) |
5.8. Data preparation
| Method | Purpose |
|---|---|
void ReadData(void) |
Reading the data from the document |
void PrepareData(void) |
Preparing the data for drawing (the arrays pdSurface, pdSurfaceX/Y, the limits) |
void ReadTpl(void) / void PrepareTpl(void) |
Reading and preparing the .tt topology (cBlockTpl) |
void PrepareBoundaryTpl(void) |
Preparing the block boundaries (pcBoundBlockTpl, the counter nBoundBlockTpl) |
void SetTplFileName(void) |
Forming the .tt-file name (csTplFileName) |
void DeleteData(void) |
Freeing all the data |
int GetNumberElement(double dX, double dY) |
The element index by coordinates (private) |
void SetDefaultValue(void) |
The default setting values |
void WriteIniFile(void) |
Saving the settings (the keys of §5.10) |
void PutTrace1(void) / void PutStatistics1(void) |
Output of the current values to the status bar |
5.9. Message handlers
Scene rotation: OnRotateLeft/Right/Top/Bottom, OnRotateLefty/Righty,
OnRotatexn/xv, OnRotateyn/yv, OnRotatezn/zv (the angles wAngleX/Y/Z).
Translation: OnTranslateXt/Xb/Yt/Yb/Zt/Zb, OnTranslateXn/Xv/Yn/Yv/Zn/Zv (the
values wTranslateX/Y/Z); data translation — OnTranslatedataxn/xv/yn/yv.
Arrows: OnStrelkleft/right/up/down.
Scaling: OnViewZoomP/M (general), OnViewZoomPx/Mx (along X), OnViewZoomPy/My
(along Y); OnViewDefault (the default view), OnViewProportionally (the proportional
mode, the flag bProportionally).
Field display modes: OnFlagdrawsurface/OnFlagdrawline (surface/lines),
OnDimension23switch (2D/3D), OnFieldL/OnFieldValue/OnFieldModul (the quantity
type: level/value/magnitude; the flags bDrawFieldValueFlag, bDrawFieldModulFlag).
ε modes: OnFlagdrawsurfaceeps/OnFlagdrawlineeps, OnDimension23switcheps.
Topology modes: OnFlagdrawsurfacetop/OnFlagdrawlinetop, OnDimension23switchtop;
the block-type visibility — OnViewTopologyBoundaryEps/Metal/Magnetic/Input/Absorber
(the flags bDrawFlagEps/Metal/Magnetic/Input/Absorber).
Dimension lines: OnViewFieldSize, OnViewEpsSize,
OnViewTopologyDimensionsAlonganxaxies/Alonganyaxies, OnViewTopologySizeBlock,
OnViewTopologySizeLinklist.
Mouse: OnLButtonDown/Up, OnMouseMove (mouse rotation; the fields cMousePoint,
bIsMouseLButonDown), OnLButtonDblClk, OnRButtonDown.
Other: OnViewParameters (the properties window §10.1), OnTimer(UINT_PTR
nIDEvent) (polling for file change and re-reading), OnDestroy.
Messages from the dialogs:
| Handler | Message |
|---|---|
LRESULT OnUserApplyPropDialogPlace(WPARAM, LPARAM) |
WM_USERAPPLY_PROPPLACE |
LRESULT OnUserApplyPropDialogField(WPARAM, LPARAM) |
WM_USERAPPLY_PROPFIELD |
LRESULT OnUserApplyPropDialogEps(WPARAM, LPARAM) |
WM_USERAPPLY_PROPEPS |
LRESULT OnUserApplyPropDialogTopol(WPARAM, LPARAM) |
WM_USERAPPLY_PROPTOPOL |
LRESULT OnCloseColorLevelDialog(WPARAM, LPARAM) |
The closing of CColorLevelDlg (pcColorLevelDialog) |
For most commands there are paired OnUpdate* handlers for the availability/checking of
the menu items.
MFC overrides: OnDraw, PreCreateWindow, OnPrepareDC, OnInitialUpdate,
OnPreparePrinting, OnBeginPrinting, OnEndPrinting, OnUpdate.
5.10. Key setting fields and save keys
The main groups of private fields:
| Group | Fields |
|---|---|
| Palettes | COLORREF pscSurfaceColor[20], pscSurfaceColor_Eps[20] |
| Colors | scAxiesColor, scColorEps, scColorMet, scColorMag, scColorInp, scColorAbs, scBackgoundColor |
| Transparency | nBlend, nBlend_Eps, nBlendTopology |
| 2D/3D | n2D3DFlag, n2D3DFlag_Eps, n2D3DFlagTopology |
| Limits | dXmin/dXmax/dYmin/dYmax, dZmin/dZmax, dZmin_Eps/dZmax_Eps |
| Scene | wAngleX/Y/Z, wTranslateX/Y/Z, dXkoefProp, dYkoefProp |
| Data | nX, nY, dDelta, pdSurface, pdSurface_Eps, pdSurfaceX, pdSurfaceY |
| Topology | pnTopType, pdTopX1..X4, pdTopY1..Y4, pdTopXinp/Yinp, nTopPolygon, nBoundBlockTpl, pcBoundBlockTpl, pcTopSize, nTopSize, dZtopol, dZtopolStrelk, nInputNum |
| Display flags | bDrawFlag, bDrawSurfaceFlag(_Eps), bDrawLineFlag(_Eps), bDrawFlagTopology, bDrawSurfaceFlagTopology, bDrawLineFlagTopology, bDrawFlagAxies*, bXsizeFlag/bYsizeFlag/bZsizeFlag(_Eps), bTopologySizeFlag(LinkList), bDrawFieldValueFlag, bDrawFieldModulFlag, bHightColorRezolution, bProportionally |
| Auxiliary | lfAxiesFont (the axis font), pcGLText (CTmcGLText*), cBlockTpl (CTmcBlockTpl), cError, bBusy, nPropertyPageInd, pcColorLevelDialog, dDrawFieldValueX/Y, nDrawFieldValue1..5 |
The settings are saved (WriteIniFile) under the name-constants TMC_GROFLD_*_INI from
FldViewView.h — the section #TMC_GraphicsOutputFieldFile, the parameters: DrFl
(drawing flags), DrFlSurface, DrFlLine, DrFlAxies, FlXSize/FlYSize/FlZSize,
Fl23D, Blend, Xmin/Xmax/Ymin/Ymax/Zmin/Zmax, XAngle/YAngle/ZAngle,
XTranslate/YTranslate/ZTranslate, ColorAxies, FontAxies, FontNameAxies,
ColorZField, ColorZEps, Dr_FlAxiesSize, Topology, TopologyColor_EpsMetMagInp,
PropertyPageNumber, ColorResolution, EpsParam, DrawFieldModulFlag, #INIWND (the
window).
6. The CTmcGLText class — OpenGL text
Purpose: outputting text into the OpenGL scene: a string is rendered into a GDI bitmap,
which is output by an OpenGL raster operation.
Header: TmcGLText.h · Base class: CWnd
Public methods
| Method | Purpose |
|---|---|
void DrawString(char *ch, double x, double y, double z) |
A string at the point (x, y, z) of the scene |
void DrawString(CString cs, double x, double y, double z) |
The same for CString |
void DrawInputNum(int n, double x, double y, double z) |
An input number ("Inp N") |
void SetColor(COLORREF scColorRef1) |
The text color |
void SetColorSize(void) |
The dimension-line color |
void SetColorInput(void) |
The input-number color |
void SetFont(LOGFONT *plf1) |
The font |
Private elements
| Element | Purpose |
|---|---|
unsigned char* getGLmonoBits(HDC hDC, HBITMAP hBmp, int *size) |
Converting a GDI bitmap into a mono bitmap for glBitmap |
unsigned char* createStringBitmapFont(HDC hDC, char *str, PSIZEL size1) |
Rasterizing a string with the selected font |
void getBitmap(BITMAP *bmp, LONG width, LONG height) |
The bitmap parameters |
int nBlend, COLORREF scColorRef, HFONT hFont, LOGFONT lf, SIZE size |
The current state |
7. The CTmcBlockTpl class — reading the topology
Purpose: reading the topology file (.tt) and the ε(x,y) distribution.
Header: TmcBlockTpl.h · Base class: CTmcRTH_BlockList (TMCIndan)
Public methods
| Method | Purpose |
|---|---|
void Read(CString csTplFileName1, CTmcLibError &cError1) |
Reading the .tt file |
int GetnX(void) |
The number of nodes along X |
double* GetpdSurface(void) |
The array ε(x,y) |
CString GetTplFileName(void) / void SetTplFileName(CString&) |
The file name |
CTmcLibError& GetError(void) |
The errors |
void DeleteData(void) |
Cleanup |
Private: void InitAllocationArray(void), void ReadData(void); the fields nTCurrent,
dTCurrent, dDelta, dXmin, dYmin, nX, nY, pdSurface (the ε distribution),
csTplFileName, cError.
8. The CTmcBoundaryTpl class — the block boundaries
Purpose: the representation of the boundaries of one topology block for drawing the
contours and the dimension lines.
Header: TmcBoundaryTpl.h — an ordinary C++ class (the inheritance from CWnd is
commented out).
Public methods
| Method | Purpose |
|---|---|
void SetBlockList(CTmcRTH_BlockList *pcBlList, CTmcLibError &cError, double dDelta) |
Building the boundaries from a block description; internally it branches by type: SetRectStat, SetCircleStat, SetPolygonStat, SetInputX, SetInputY (private) |
int GetnType(void) / int GetnBlock(void) / int GetnPoint(void) |
The block type, number, number of contour points |
CString GetcsBlock(void) / CString GetcsEpsExpr(void) |
The block keyword, the ε expression |
double GetdX0(void) / double GetdY0(void) |
The anchor coordinates |
double* GetpdX1..X4(void) / double* GetpdY1..Y4(void) |
The arrays of contour vertex coordinates (4 corners per segment) |
CTmcTopSize* GetpcTopSize(void) / int GetnTopSize(void) |
The block dimension lines and their number |
CTmcTopSize& GetcTopSizeX0(void) / GetcTopSizeY0(void) |
The anchor dimension lines (link list) along X and Y |
void SetnInputNum(int n) / int GetnInputNum(void) |
The input number |
Private: TranslateX0Y0(), DeleteData(); the fields nInputNum, nTopSize,
cTopSizeLinklListX0/Y0, pcTopSize, dX0/dY0, nBlock, csBlock, csEpsExpr,
pX1..pX4, pY1..pY4, nPoint, nType.
9. The CTmcTopSize class — a dimension line
Header: TmcTopSize.h · Base class: CWnd
| Method | Purpose |
|---|---|
void SetdX1/SetdX2/SetdY1/SetdY2(double r) |
The start/end coordinates of the line |
double GetdX1/GetdX2/GetdY1/GetdY2(void) |
Reading the coordinates |
void SetdSize(double r) / double GetdSize(void) |
The numeric size value |
void SetcsSize(CString &csr) / CString GetcsSize(void) |
The size text |
void TranslateX0Y0(double dX0, double dY0) |
Shifting the line |
CTmcTopSize& operator=(CTmcTopSize&) |
Assignment |
void DeleteData(void) |
Cleanup |
10. Dialogs
10.1. CTMCDialogPropet — the properties window
Base class: CPropertySheet. 4 tabs: "Place" (CTMCDialogPlace), "Field"
(CTMCDialogField), "Eps" (CTMCDialogEps), "Topology" (CTMCDialogTopology). On the
Apply button the tabs send the view the messages WM_USERAPPLY_PROP* (§3).
10.2. CTMCDialogPlace — the "Place" tab
The X/Y axes, the length/time units, the axis font, proportional display.
10.3. CTMCDialogField — the "Field" tab
The color scale (20 colors), the Z limits (auto/manual), 2D/3D, blend, the displayed quantity type (L / Value / Modul).
10.4. CTMCDialogEps — the "Eps" tab
The ε color scale, the Z limits, 2D/3D, blend.
10.5. CTMCDialogTopology — the "Topology" tab
Block visibility by type (dielectric/metal/magnetic/input/absorber), the colors, surface/lines, 2D/3D.
10.6. CTmcASetColor — palette configuration
Configuring the 20-color palette with auto-interpolation between the reference colors.
10.7. CColorLevelDlg — the color levels
Manual input of 20 values of the color-scale levels; it reports its closing to the view
(OnCloseColorLevelDialog).
11. Input file formats
11.1. The binary field file (.ex)
The header markers are the constants TMC_GROFLD_DOCFILE_* from the shared header
src/Include/Tmcgrviw.h (lines 101–111):
#TMC_GraphicsOutputFieldFile FormVer2.0 2000
#TMCGROFLD_nT <nT>
#TMCGROFLD_Time <T>
#TMCGROFLD_Delta <Delta>
#TMCGROFLD_Xmin <Xmin>
#TMCGROFLD_Ymin <Ymin>
#TMCGROFLD_Accuracy <Accuracy>
#TMCGROFLD_LongUnit <unit>
#TMCGROFLD_TimeUnit <unit>
#TMCGROFLD_nX <nX>
#TMCGROFLD_nY <nY>
<binary data: nY × nX values>
11.2. The topology file (.tt)
Created by the compute kernel (TMCIndan: csFileNameTopology.Format("%s.tt", ...)). The
structure:
#TMC_TopologyOutputFile FormVer2.0 2000
#BlockListBegin
<topology blocks>
#BlockListEnd
<field parameters>
<binary data>
11.3. Topology block types (nType)
The constants from src/Include/Tmcgrviw.h (used by SetColornType):
| Constant | Value | Meaning |
|---|---|---|
CTMCRTH_BLCKNTYPE_EPS |
0 | Dielectric |
CTMCRTH_BLCKNTYPE_ABSORBER |
100 | Absorber |
CTMCRTH_BLCKNTYPE_METAL |
101 | Metal |
CTMCRTH_BLCKNTYPE_INPXLEFT |
102 | X input on the left |
CTMCRTH_BLCKNTYPE_INPXRIGHT |
103 | X input on the right |
CTMCRTH_BLCKNTYPE_INPYTOP |
104 | Y input on the top |
CTMCRTH_BLCKNTYPE_INPYBOT |
105 | Y input on the bottom |
CTMCRTH_BLCKNTYPE_MAGNETIC |
107 | Magnetic |
Additionally, absorber variants CTMCRTH_BLCKNTYPE_ABSR_0000..1111 (values 1–16) and
ABSR_1111_1..4 (21–24) are defined — a bit-mask encoding of the absorbing sides.