home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
PASM.LZH
/
PASMAPP.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1996-07-10
|
26KB
|
1,005 lines
/* Project partsasm
Project Team DoGA
Copyright (c) 1995. All Rights Reserved.
サブシステム: partsasm.exe Application
ファイル: pasmapp.cpp
作成者: Taka2
概要
====
partsasmApp (TApplication) のインプリメンテーション用のソースファイル
*/
#include <owl\owlpch.h>
#pragma hdrstop
#include <owl\inputdia.h>
#include <owl\statusba.h>
#include "pasmapp.h"
#include "prtssmad.h" // 「プログラムについて」ダイアログボックスの定義
#include "winframe.h"
#include "design.h"
#include "parts.h"
#include "partsdlg.h"
#include "files.h"
#include "fxg.h"
#include "dslider.h"
#include "dselcol.h"
#include "rendexec.h"
#include "suflib.h"
#include "bmpopen.h"
#include "syscolor.h"
#include "log.h"
//{{partsasmApp Implementation}}
//const char *HelpFileName="partsasm.hlp";
char HelpFileName[256];
//
// アプリケーションが処理するすべてのメッセージ/コマンドに対する応答テーブルを作成する
//
DEFINE_RESPONSE_TABLE1(partsasmApp, TApplication)
//{{partsasmAppRSP_TBL_BEGIN}}
EV_COMMAND(CM_FILENEW, CmFileNew), EV_COMMAND_ENABLE(CM_FILENEW, CmFileNewEnable),
EV_COMMAND(CM_FILEOPEN, CmFileOpen),
EV_COMMAND(CM_FILESAVEAS, CmFileSaveAs), EV_COMMAND_ENABLE(CM_FILESAVEAS, CmFileSaveAsEnable),
EV_COMMAND(CM_FILESAVE, CmFileSave), EV_COMMAND_ENABLE(CM_FILESAVE, CmFileSaveEnable),
EV_COMMAND(CM_EDITDELETE, CmEditDelete), EV_COMMAND_ENABLE(CM_EDITDELETE, CmEditDeleteEnable),
EV_COMMAND(CM_EDITDUP, CmEditDuplicate), EV_COMMAND_ENABLE(CM_EDITDUP, CmEditDuplicateEnable),
EV_COMMAND(CM_PartsExchange, CmPartsExchange), EV_COMMAND_ENABLE(CM_PartsExchange, CmPartsExchangeEnable),
EV_COMMAND(CM_EDITDUPX, CmEditDuplicateX), EV_COMMAND_ENABLE(CM_EDITDUPX, CmEditDuplicateEnable),
EV_COMMAND(CM_EDITDUPY, CmEditDuplicateY), EV_COMMAND_ENABLE(CM_EDITDUPY, CmEditDuplicateEnable),
EV_COMMAND(CM_EDITDUPZ, CmEditDuplicateZ), EV_COMMAND_ENABLE(CM_EDITDUPZ, CmEditDuplicateEnable),
EV_COMMAND(CM_ALLSCALE, CmAllScale), EV_COMMAND_ENABLE(CM_ALLSCALE, CmAllScaleEnable),
EV_COMMAND(CM_PartsCatalog, CmPartsCatalog), EV_COMMAND_ENABLE(CM_PartsCatalog, CmPartsCatalogEnable),
EV_COMMAND(CM_PARTSINITROT, CmPartsInitRot), EV_COMMAND_ENABLE(CM_PARTSINITROT, CmPartsInitRotEnable),
EV_COMMAND(CM_PARTSINITSCALE, CmPartsInitScale), EV_COMMAND_ENABLE(CM_PARTSINITSCALE, CmPartsInitScaleEnable),
EV_COMMAND(CM_FXGSHOW, CmFxgShow), EV_COMMAND_ENABLE(CM_FXGSHOW, CmFxgShowEnable),
EV_COMMAND(CM_RENDSHOW, CmRendShow), EV_COMMAND_ENABLE(CM_RENDSHOW, CmRendShowEnable),
EV_COMMAND(CM_RENDCOLOR, CmRendColor), EV_COMMAND_ENABLE(CM_RENDCOLOR, CmRendColorEnable),
EV_COMMAND(CM_DISPZOOM, CmDispZoom), EV_COMMAND_ENABLE(CM_DISPZOOM, CmDispZoomEnable),
EV_COMMAND(CM_ETCSCALEDOWN, CmEtcScaleDown), EV_COMMAND_ENABLE(CM_ETCSCALEDOWN, CmEtcScaleDownEnable),
EV_COMMAND(CM_ETCSCALEUP, CmEtcScaleUp), EV_COMMAND_ENABLE(CM_ETCSCALEUP, CmEtcScaleUpEnable),
EV_COMMAND(CM_ETCMESHON, CmEtcMeshOn), EV_COMMAND_ENABLE(CM_ETCMESHON, CmEtcMeshOnEnable),
EV_COMMAND(CM_ETCMESHSPACING, CmEtcMeshSpacing), EV_COMMAND_ENABLE(CM_ETCMESHSPACING, CmEtcMeshSpacingEnable),
EV_COMMAND(CM_ETCINITEYE, CmEtcInitEye), EV_COMMAND_ENABLE(CM_ETCINITEYE, CmEtcInitEyeEnable),
EV_COMMAND(CM_ETCHIDDENREMOVE, CmEtcHiddenRemove), EV_COMMAND_ENABLE(CM_ETCHIDDENREMOVE, CmEtcHiddenRemoveEnable),
EV_COMMAND(CM_ETCGRID, CmEtcGrid), EV_COMMAND_ENABLE(CM_ETCGRID, CmEtcGridEnable),
EV_COMMAND(CM_ETCGRIDSPACE, CmEtcGridSpace),
EV_COMMAND(CM_ETCROTSPACE, CmEtcRotSpace),
EV_COMMAND(CM_ETCSCALESPACE, CmEtcScaleSpace),
EV_COMMAND(CM_HELPCONTEXT, CmHelpContext),
EV_COMMAND(CM_HELPABOUT, CmHelpAbout),
EV_COMMAND(CM_ETCSCALEONLY, CmEtcScaleOnly),
EV_COMMAND(CM_ETCROTONLY, CmEtcRotOnly),
EV_COMMAND(CM_ETCROTSCALE, CmEtcRotScaleCompound),
EV_COMMAND(CM_ETCINITTARGET, CmEtcInitTarget),
EV_COMMAND(CM_PARTSINITMOVE, CmPartsInitMove),
EV_COMMAND_ENABLE(CM_ETCROTONLY, CmEtcRotOnlyEnable),
EV_COMMAND_ENABLE(CM_ETCSCALEONLY, CmEtcScaleOnlyEnable),
EV_COMMAND_ENABLE(CM_ETCROTSCALE, CmEtcRotScaleCompoundEnable),
EV_COMMAND_ENABLE(CM_PARTSINITMOVE, CmPartsInitMoveEnable),
EV_BN_CLICKED(BUTTON_OK, EvButtonOk),
//{{partsasmAppRSP_TBL_END}}
END_RESPONSE_TABLE;
//////////////////////////////////////////////////////////
// partsasmApp
// =====
//
partsasmApp::partsasmApp () : TApplication("Parts Assembler")
{
HelpState = FALSE;
execonce = FALSE;
// 「開く」と「名前を付けて保存」ダイアログボックスに共通の,ファイルフラグとフィルタ。ファイル名と
// ディレクトリは,メンバー関数 CmFileOpen と CmFileSaveAs で計算される
// INSERT>> コンストラクタ用のコードはここに
}
partsasmApp::~partsasmApp ()
{
// INSERT>> デストラクタ用のコードはここに
}
//////////////////////////////////////////////////////////
// partsasmApp
// =====
// アプリケーションの初期化
//
void partsasmApp::InitMainWindow ()
{
TWinFrame *client = new TWinFrame(0);
designdata = client->designdata;
// TFrameWindow *frame = new TFrameWindow(0, GetName(), client, TRUE);
TDecoratedFrame *frame = new TDecoratedFrame(0, GetName(), client, TRUE);
int screenX = GetSystemMetrics(SM_CXSCREEN);
int screenY = GetSystemMetrics(SM_CYSCREEN);
if (screenX <= 800) {
frame->Attr.W = screenX - 20;
frame->Attr.H = screenY - 60;
} else {
frame->Attr.W = 800;
frame->Attr.H = 600;
}
// メインウィンドウ用の,デフォルトのウィンドウスタイルをオーバーライドする
frame->Attr.Style |= WS_BORDER | WS_CAPTION | WS_CLIPCHILDREN | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU | WS_THICKFRAME | WS_VISIBLE;
frame->Attr.Style &= ~(WS_CHILD);
nCmdShow = nCmdShow != SW_SHOWMINIMIZED ? SW_SHOWNORMAL : nCmdShow;
//
// このアプリケーションに,アイコンを設定する
//
frame->SetIcon(this, IDI_SDIAPPLICATION);
//
// ウィンドウに対応したメニューと,テーブルに対応したアクセラレータのテーブル
//
frame->AssignMenu(SDI_MENU);
#if 0
switch (fxgaflag) {
case PREVIEW_FXGA:
frame->AssignMenu(SDI_MENU);
break;
case PREVIEW_REND:
frame->AssignMenu(SDI_MENU_REND);
break;
case PREVIEW_BOTH:
frame->AssignMenu(SDI_MENU_BOTH);
break;
}
#endif
//
// アクセラレータテーブルへの関連付け
//
frame->Attr.AccelTable = SDI_MENU;
frame->Insert(*designdata->InitStatusBar(), TDecoratedFrame::Bottom);
SetMainWindow(frame);
}
//////////////////////////////////////////////////////////
// partsasmApp
// ===========
// 「ファイル」メニューの「新規作成」コマンド
void partsasmApp::CmFileNew ()
{
TWindow *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), TWindow); // フレーム用のクライアントウィンドウ
if (client->CanClose()) {
designdata->FileNew();
}
}
//////////////////////////////////////////////////////////
// partsasmApp
// ===========
// 「ファイル」メニューの「開く」コマンド
void partsasmApp::CmFileOpen ()
{
//
// 標準の「開く」ダイアログボックスを表示し,ファイル名を選ぶ
//
#if 0
TOpenSaveDialog::TData FileData(
OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,
"フレームファイル(*.fsc)|*.fsc|",
0, designdata->filedir, "FSC");
TWindow *client = TYPESAFE_DOWNCAST(GetMainWindow()->GetClientWindow(), TWindow); // フレーム用のクライアントウィンドウ
if (client->CanClose()) {
if (TFileOpenDialog(GetMainWindow(), FileData).Execute() == IDOK) {
designdata->FileRead(FileData.FileName);
}
}
#else
#ifndef MAX_PATH
#define MAX_PATH 256
#endif
if (GetMainWindow()->CanClose()) {
char fname[MAX_PATH];
if (FileOpenDialogWithBMP(
GetMainWindow(),fname,
OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,
"フレームファイル(*.fsc)|*.fsc|",
0, designdata->filedir, "FSC") == IDOK) {
designdata->FileRead(fname);
}
}
#endif
}
//////////////////////////////////////////////////////////
// partsasmApp
// ===========
// 「ヘルプ」メニューの「partsasm.exe について」コマンド
void partsasmApp::CmHelpAbout ()
{
//
// モーダルダイアログを表示する
//
partsasmAboutDlg(MainWindow).Execute();
}
int OwlMain (int /*argc*/, char* /*argv*/[])
{
partsasmApp App;
int result;
FileInit();
sprintf(HelpFileName, "%sPARTSASM.HLP", pathdir.c_str());
Object::UsePoly();
result = App.Run();
return result;
}
void partsasmApp::CmPartsAdd ()
{
// INSERT>> 追加コードはここに
TOpenSaveDialog::TData FileData(
OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,
"形状ファイル(*.suf)|*.suf|"
"すべてのファイル(*.*)|*.*|",
0, "", "suf");
TFileOpenDialog OpenDlg(GetMainWindow(), FileData);
//
// 標準の「開く」ダイアログボックスを表示し,ファイル名を選ぶ
//
if (OpenDlg.Execute() == IDOK) {
designdata->PartsAdd(FileData.FileName,
-(1.0/designdata->displayscale) * designdata->displayoffset);
}
}
void partsasmApp::CmPartsCatalog ()
{
// INSERT>> 追加コードはここに
PartsDialog dialog(GetMainWindow(), designdata->cataloglastmenu, designdata->cataloglastparts);
if (dialog.Execute() == IDOK) {
designdata->PartsAdd(dialog.filename,
-(1.0/designdata->displayscale) * designdata->displayoffset);
designdata->cataloglastmenu = dialog.nowmenu;
designdata->cataloglastparts = dialog.nowparts;
}
}
void partsasmApp::CmEtcScaleDown ()
{
// INSERT>> 追加コードはここに
designdata->ScaleDown();
}
void partsasmApp::CmEtcScaleDownEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->ScaleDownLimitCheck());
}
void partsasmApp::CmEtcScaleUp ()
{
// INSERT>> 追加コードはここに
designdata->ScaleUp();
}
void partsasmApp::CmEtcScaleUpEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->ScaleUpLimitCheck());
}
void partsasmApp::CmEditDelete ()
{
// INSERT>> 追加コードはここに
designdata->PartsDelete(designdata->select);
}
void partsasmApp::CmEditDuplicate ()
{
// INSERT>> 追加コードはここに
designdata->PartsCopy(designdata->select);
}
void partsasmApp::CmEditDuplicateX ()
{
// INSERT>> 追加コードはここに
designdata->PartsCopy(designdata->select, SelX);
}
void partsasmApp::CmEditDuplicateY ()
{
// INSERT>> 追加コードはここに
designdata->PartsCopy(designdata->select, SelY);
}
void partsasmApp::CmEditDuplicateZ ()
{
// INSERT>> 追加コードはここに
designdata->PartsCopy(designdata->select, SelZ);
}
void partsasmApp::CmFileSaveAs ()
{
// INSERT>> 追加コードはここに
#if 0
TOpenSaveDialog::TData FileData(
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"フレームファイル(*.fsc)|*.fsc|",
0, designdata->filedir, "FSC");
if (TFileSaveDialog(GetMainWindow(), FileData).Execute() == IDOK) {
designdata->FileWrite(FileData.FileName);
}
#else
char fname[MAX_PATH];
if (FileSaveDialogWithBMP(
GetMainWindow(), fname,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"フレームファイル(*.fsc)|*.fsc|",
0, designdata->filedir, "FSC") == IDOK) {
designdata->FileWrite(fname);
}
#endif
}
void partsasmApp::CmFileSave ()
{
// INSERT>> 追加コードはここに
designdata->FileWrite();
}
void partsasmApp::CmFileSaveEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->filename[0] != '\0');
}
void partsasmApp::CmEtcScaleOnly ()
{
// INSERT>> 追加コードはここに
designdata->dragtype = DragScaleOnly;
if (designdata->select != NULL) {
designdata->Redraw();
}
}
void partsasmApp::CmEtcScaleOnlyEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
if (designdata->dragtype == DragScaleOnly) {
tce.SetCheck(1);
} else {
tce.SetCheck(0);
}
}
void partsasmApp::CmEtcRotOnly ()
{
// INSERT>> 追加コードはここに
designdata->dragtype = DragRotOnly;
if (designdata->select != NULL) {
designdata->Redraw();
}
}
void partsasmApp::CmEtcRotOnlyEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
if (designdata->dragtype == DragRotOnly) {
tce.SetCheck(1);
} else {
tce.SetCheck(0);
}
}
void partsasmApp::CmEtcRotScaleCompound ()
{
// INSERT>> 追加コードはここに
designdata->dragtype = DragCompound;
if (designdata->select != NULL) {
designdata->Redraw();
}
}
void partsasmApp::CmEtcRotScaleCompoundEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
if (designdata->dragtype == DragCompound) {
tce.SetCheck(1);
} else {
tce.SetCheck(0);
}
}
void partsasmApp::CmEditDuplicateEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->select != NULL
&& designdata->select != designdata->camera
&& designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmEditDeleteEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->select != NULL && designdata->select != designdata->camera && designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmEtcGridSpace ()
{
// INSERT>> 追加コードはここに
char *buf[] = {"20", "50", "100", "200", "250", "300", "400", "500",NULL};
int pos;
for (pos = 0; buf[pos] != NULL; pos++) {
if (designdata->gridspacing == atoi(buf[pos])) {
break;
}
}
if (buf[pos] == NULL) pos = 1;
TDSliderInput dialog(MainWindow, "移動グリッド量設定", "位置設定の最小単位を設定してください", buf, pos);
if (dialog.Execute() == IDOK) {
designdata->gridspacing = atoi(buf[pos]);
}
#if 0
char str[16];
sprintf(str, "%d", designdata->gridspacing);
TInputDialog dialog(MainWindow, "移動グリッド量設定", "位置設定の最小単位を入力してください", str, 16);
if (dialog.Execute() == IDOK) {
int n = atoi(str);
if (0 < n && n < 1000) {
designdata->gridspacing = n;
designdata->Redraw(SelXYZ, TRUE);
}
}
#endif
}
void partsasmApp::CmEtcRotSpace ()
{
// INSERT>> 追加コードはここに
char *buf[] = {"2", "5", "10", "15", "20", "30", "45",NULL};
int pos;
for (pos = 0; buf[pos] != NULL; pos++) {
if (designdata->rotspacing == atoi(buf[pos])) {
break;
}
}
if (buf[pos] == NULL) pos = 5;
TDSliderInput dialog(MainWindow, "回転グリッド量設定", "回転角度の最小単位を設定してください", buf, pos);
if (dialog.Execute() == IDOK) {
designdata->rotspacing = atoi(buf[pos]);
}
#if 0
char str[16];
sprintf(str, "%d", designdata->rotspacing);
TInputDialog dialog(MainWindow, "回転グリッド量設定", "回転角度の最小単位を入力してください", str, 16);
if (dialog.Execute() == IDOK) {
int n = atoi(str);
if (0 < n && n < 1000) {
designdata->rotspacing = n;
}
}
#endif
}
void partsasmApp::CmEtcScaleSpace ()
{
// INSERT>> 追加コードはここに
char *buf[] = {"0.05", "0.1", "0.2", "0.5", NULL};
int pos;
for (pos = 0; buf[pos] != NULL; pos++) {
if (designdata->scalespacing == (int)(atof(buf[pos]) * scalespacingfactor)) {
break;
}
}
if (buf[pos] == NULL) pos = 3;
TDSliderInput dialog(MainWindow, "拡大グリッド量設定", "拡大倍率の最少単位を設定してください", buf, pos);
if (dialog.Execute() == IDOK) {
designdata->scalespacing = atof(buf[pos]) * scalespacingfactor;
}
#if 0
char str[16];
sprintf(str, "%5.2lf", designdata->scalespacing / scalespacingfactor);
TInputDialog dialog(MainWindow, "拡大グリッド量設定", "拡大倍率の最少単位を入力してください", str, 16);
if (dialog.Execute() == IDOK) {
double d;
sscanf(str, "%lf", &d);
int n = d * scalespacingfactor;
if (0 < n && n < 10000) {
designdata->scalespacing = n;
}
}
#endif
}
void partsasmApp::CmEtcInitEye ()
{
// INSERT>> 追加コードはここに
designdata->camera->position = Vector(1200,-900,900);
// designdata->camera->SetTarget(designdata->camera->target);
designdata->camera->SetTarget(Vector(0,0,0));
designdata->CalcPoints(designdata->camera);
designdata->CalcViewAll();
designdata->editflag++;
designdata->Redraw();
}
void partsasmApp::CmEtcInitTarget ()
{
// INSERT>> 追加コードはここに
designdata->camera->SetTarget(Vector(0,0,0));
designdata->CalcPoints(designdata->camera);
designdata->CalcViewAll();
designdata->editflag++;
designdata->Redraw();
}
void partsasmApp::CmPartsExchange ()
{
// INSERT>> 追加コードはここに
PartsDialog dialog(GetMainWindow(), designdata->cataloglastmenu, designdata->cataloglastparts);
if (dialog.Execute() == IDOK) {
Vector p = designdata->select->position;
Vector r = designdata->select->rotation;
Vector s = designdata->select->scale;
designdata->PartsDelete(designdata->select);
designdata->PartsAdd(dialog.filename, p, r, s);
designdata->cataloglastmenu = dialog.nowmenu;
designdata->cataloglastparts = dialog.nowparts;
}
}
void partsasmApp::CmPartsExchangeEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->select != NULL && designdata->select != designdata->camera && designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmEtcHiddenRemove ()
{
// INSERT>> 追加コードはここに
designdata->hiddenremove = ! designdata->hiddenremove;
designdata->BuildWireFrame();
designdata->Redraw(SelPers);
}
void partsasmApp::CmEtcHiddenRemoveEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.SetCheck(designdata->hiddenremove);
}
void partsasmApp::CmEtcGrid ()
{
// INSERT>> 追加コードはここに
designdata->gridflag = ! designdata->gridflag;
designdata->Redraw(SelStat);
}
void partsasmApp::CmEtcGridEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
if (designdata->gridflag) {
tce.SetCheck(1);
} else {
tce.SetCheck(0);
}
// tce.Enable(designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmPartsInitMove ()
{
// INSERT>> 追加コードはここに
designdata->select->position = Vector(0,0,0);
designdata->CalcPoints(designdata->select);
designdata->editflag++;
designdata->Redraw();
}
void partsasmApp::CmPartsInitMoveEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->select != NULL && designdata->select != designdata->camera);
}
void partsasmApp::CmPartsInitRot ()
{
// INSERT>> 追加コードはここに
designdata->select->rotation = Vector(0,0,0);
designdata->CalcPoints(designdata->select);
designdata->editflag++;
designdata->Redraw();
}
void partsasmApp::CmPartsInitRotEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->select != NULL && designdata->select != designdata->camera && designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmPartsInitScale ()
{
// INSERT>> 追加コードはここに
designdata->select->scale = Vector(1,1,1);
designdata->CalcPoints(designdata->select);
designdata->editflag++;
designdata->Redraw();
}
void partsasmApp::CmPartsInitScaleEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->select != NULL && designdata->select != designdata->camera && designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmFxgShow ()
{
static char *title ="FXGA メカデザイン表示";
if (FindWindow(NULL, title) != NULL) {
GetMainWindow()->MessageBox("現在実行中です", title, MB_OK);
} else {
FXG_Show(designdata->parts);
designdata->statusbar->SetText("SELECT:任意・回転・直進 I:色変更 II:床表示 III:縮小 IV:拡大 V:スペキュラー VI:背景表示");
}
}
void partsasmApp::CmFxgShowEnable (TCommandEnabler &tce)
{
tce.Enable(designdata->parts != NULL && designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmRendShow ()
{
static char *title = "REND for Windows";
HWND hRend;
if (designdata->camera->position.x != designdata->camera->target.x
|| designdata->camera->position.y != designdata->camera->target.y) {
if ((hRend = FindWindow(NULL, title)) != NULL) {
::SendMessage(hRend, WM_CLOSE, 0, 0);
}
RendMechanic(designdata->parts, designdata->camera, designdata->color);
}
}
void partsasmApp::CmRendShowEnable (TCommandEnabler &tce)
{
tce.Enable(designdata->parts != NULL
&& designdata->zoommode != ZoomSelect
&& (designdata->camera->position.x != designdata->camera->target.x
|| designdata->camera->position.y != designdata->camera->target.y));
}
void partsasmApp::CmRendColor ()
{
char opt[1024], *s, *d;
int w=320, h=240;
strcpy(opt, rendoption.c_str());
for (s = d = opt; *s; ) {
if ((*s == '-' || *s == '/') && (s[1] == 'c' || s[1] == 'C')) {
s+=2;
w = atoi(s);
while (*s && isdigit(*s)) s++;
if (*s) {
s++;
if (isdigit(*s)) {
h = atoi(s);
}
while(*s && !isspace(*s)) s++;
if (*s) s++;
}
} else {
*d++ = *s++;
}
}
while (d > opt && isspace(d[-1])) d--;
*d = '\0';
LightType lt;
int ilt = 0;
lt = Parts::GetLightType();
if (lt == LightRightUpper || lt == LightRightLower) {
ilt = 1;
}
TDSelColor dialog(MainWindow, designdata->color, ilt, w, h);
if (dialog.Execute() == IDOK) {
if (designdata->color != (RendColor)dialog.selcolor) {
designdata->color = (RendColor)dialog.selcolor;
char *cname[5] = {"白","青","赤","緑","紫"};
rendcolor = cname[dialog.selcolor];
}
Parts::SetLightType(dialog.sellight ? LightRightUpper : LightLeftUpper);
rendlight = dialog.sellight ? "右上" : "左上";
if (w != dialog.selwidth || h != dialog.selheight) {
w = dialog.selwidth;
h = dialog.selheight;
sprintf(opt+strlen(opt), " -c%d:%d:%d:%d", w, h, w, h);
rendoption = opt;
}
FileWriteRendOption();
}
}
void partsasmApp::CmRendColorEnable (TCommandEnabler &tce)
{
tce.Enable(designdata->zoommode != ZoomSelect);
}
void partsasmApp::EvButtonOk(void)
{
// logprintf("ButtonOk\n");
}
void partsasmApp::CmEtcMeshOn ()
{
// INSERT>> 追加コードはここに
designdata->meshflag = !designdata->meshflag;
designdata->Redraw(SelXYZ);
}
void partsasmApp::CmEtcMeshOnEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.SetCheck(designdata->meshflag != FALSE);
tce.Enable(designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmEtcMeshSpacing ()
{
// INSERT>> 追加コードはここに
char *buf[] = {"50", "100", "200", "250", "300", "400", "500", NULL};
int pos;
for (pos = 0; buf[pos] != NULL; pos++) {
if (designdata->meshspacing == atoi(buf[pos])) {
break;
}
}
if (buf[pos] == NULL) pos = 5;
TDSliderInput dialog(MainWindow, "メッシュ間隔設定", "メッシュの間隔を設定してください", buf, pos);
if (dialog.Execute() == IDOK) {
designdata->meshspacing = atoi(buf[pos]);
designdata->Redraw(SelXYZ, TRUE);
}
#if 0
char str[16];
sprintf(str, "%d", designdata->meshspacing);
TInputDialog dialog(MainWindow, "メッシュ間隔設定", "メッシュの間隔を入力してください", str, 16);
if (dialog.Execute() == IDOK) {
int n = atoi(str);
if (0 < n && n < 10000) {
designdata->meshspacing = n;
designdata->Redraw(SelXYZ, TRUE);
}
}
#endif
}
void partsasmApp::CmEtcMeshSpacingEnable (TCommandEnabler &tce)
{
tce.Enable(designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmAllScale ()
{
// INSERT>> 追加コードはここに
char *buf[] = {"0.5", "0.6", "0.7", "0.8", "0.9", "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", NULL};
int pos = 5;
TDSliderInput dialog(MainWindow,"物体全体拡大", "物体全体の拡大倍率を設定してください", buf, pos);
if (dialog.Execute() == IDOK) {
double r = atof(buf[pos]);
designdata->TotalScaling(r);
}
}
void partsasmApp::CmAllScaleEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->parts != NULL && designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmHelpContext ()
{
HelpState = GetMainWindow()->WinHelp(HelpFileName, HELP_CONTENTS, 0L);
}
void partsasmApp::CmFileSaveAsEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->parts != NULL);
}
void partsasmApp::CmFileNewEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->parts != NULL);
}
void partsasmApp::CmDispZoom ()
{
// INSERT>> 追加コードはここに
designdata->SelectZoom();
}
void partsasmApp::CmDispZoomEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.SetCheck(designdata->zoommode != ZoomNone);
}
void partsasmApp::CmPartsCatalogEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->zoommode != ZoomSelect);
}
void partsasmApp::CmEtcInitEyeEnable (TCommandEnabler &tce)
{
// INSERT>> 追加コードはここに
tce.Enable(designdata->zoommode != ZoomSelect);
}
BOOL partsasmApp::CanClose ()
{
BOOL result = TApplication::CanClose();
if (result && HelpState)
GetMainWindow()->WinHelp(HelpFileName, HELP_QUIT, 0L);
static char *title = "REND for Windows";
HWND hRend;
if ((hRend = FindWindow(NULL, title)) != NULL) {
::SendMessage(hRend, WM_CLOSE, 0, 0);
}
return result;
}
BOOL partsasmApp::IdleAction (long idleCount)
{
BOOL result;
result = TApplication::IdleAction(idleCount);
// INSERT>> 追加のコードはここに
if (execonce != FALSE) {
return result;
}
execonce = TRUE;
TWindow *client = GetMainWindow();
TClientDC dc(*client);
InitSysColor(dc);
TMenu menu(GetMainWindow()->GetMenu());
TMenu submenu(menu.GetSubMenu(3));
if (fxgaflag == PREVIEW_FXGA) {
submenu.RemoveMenu(CM_RENDSHOW, MF_BYCOMMAND);
submenu.RemoveMenu(CM_RENDCOLOR, MF_BYCOMMAND);
} else if (fxgaflag == PREVIEW_REND) {
submenu.RemoveMenu(CM_FXGSHOW, MF_BYCOMMAND);
}
return result;
}