home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
PASM.LZH
/
PERS.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-31
|
4KB
|
157 lines
/* Project partsasm
Project Team DoGA
Copyright (c) 1995. All Rights Reserved.
サブシステム: partsasm.apx Application
ファイル: pers.cpp
作成者: Taka2
概要
====
TWinPers (TWindow) のインプリメンテーション用のソースファイル
*/
#include <owl\owlpch.h>
#pragma hdrstop
#include "design.h"
#include "pers.h"
#include "parts.h"
#include "syscolor.h"
#include "log.h"
//{{TWinPers Implementation}}
TWinPers::TWinPers (TWindow* parent, DesignData *dat, int x, int y, int w, int h):
TWindow(parent, 0, 0)
{
// INSERT>> コンストラクタ用のコードはここに
SetBkgndColor(TColor::LtGray);
Attr.X = x;
Attr.Y = y;
Attr.W = w;
Attr.H = h;
designdata = dat;
}
TWinPers::~TWinPers ()
{
Destroy();
// INSERT>> デストラクタ用のコードはここに
}
void TWinPers::Paint (TDC& dc, BOOL erase, TRect& rect)
{
TWindow::Paint(dc, erase, rect);
// INSERT>> 追加のコードはここに
designdata->Redraw(SelPers, FALSE);
}
void TWinPers::ShowObject(TDC& dc, Parts *p)
{
if (p == designdata->select
|| (designdata->select == designdata->combined && p->sel)) {
dc.SelectObject(TPen(cWireSelect));
} else if (p == designdata->camera) {
dc.SelectObject(TPen(cWireCamera));
} else if (designdata->select != NULL && designdata->select != designdata->camera) {
dc.SelectObject(TPen(cWireNoSelect));
} else {
dc.SelectObject(TPen(cWireNormal));
}
int begin, end = -1;
for (int i = 0; i < p->lines; ++i) {
if (p->view_z[p->line_1[i]] <= 0 || p->view_z[p->line_2[i]] <= 0) {
end = -1;
} else {
if ((begin = p->line_1[i]) != end) {
dc.MoveTo(p->view_x[begin], p->view_y[begin]);
}
end = p->line_2[i];
dc.LineTo(p->view_x[end], p->view_y[end]);
}
}
}
void TWinPers::Redraw(void)
{
#if 1
TClientDC cdc(*this);
TMemoryDC dc(cdc);
TBitmap bitmap(cdc, Attr.W, Attr.H);
dc.SelectObject(bitmap);
#else
TClientDC dc(*this);
#endif
dc.SelectObject(TPen(cBackGround));
dc.SelectObject(TBrush(cBackGround));
dc.Rectangle(dc.GetClipBox());
dc.SetBkColor(cBackGround);
dc.SetTextColor(TColor::White);
if (designdata->hiddenremove && designdata->wireframe.line != NULL) {
LineSegment *l = designdata->wireframe.line;
int lastx = l->x1, lasty = l->y1;
dc.MoveTo(lastx, lasty);
if (designdata->select != NULL && designdata->select != designdata->camera) {
dc.SelectObject(TPen(cWireNoSelect));
int sel=FALSE;
int combflag = (designdata->select == designdata->combined);
for (int i = designdata->wireframe.lines; i > 0; --i) {
int nsel = (l->id == designdata->select
|| (combflag && l->id && ((Parts*)(l->id))->sel));
if (!sel && nsel) {
dc.SelectObject(TPen(cWireSelect));
} else if (sel && !nsel) {
dc.SelectObject(TPen(cWireNoSelect));
}
sel = nsel;
if (lastx != l->x1 || lasty != l->y1) {
dc.MoveTo(l->x1, l->y1);
}
dc.LineTo(l->x2, l->y2);
lastx = l->x2; lasty = l->y2;
l++;
}
} else {
dc.SelectObject(TPen(cWireNormal));
for (int i = designdata->wireframe.lines; i > 0; --i) {
if (lastx != l->x1 || lasty != l->y1) {
dc.MoveTo(l->x1, l->y1);
}
dc.LineTo(l->x2, l->y2);
lastx = l->x2; lasty = l->y2;
l++;
}
}
} else {
for (Parts *p = designdata->parts; p != NULL; p = p->next) {
if (p !=designdata->select) {
ShowObject(dc, p);
}
}
if (designdata->select != designdata->camera && designdata->select != NULL) {
ShowObject(dc, designdata->select);
}
}
#if 1
cdc.BitBlt(0,0,Attr.W, Attr.H, dc, 0, 0, SRCCOPY);
#endif
}