Разработка программного обеспечения - таймера
Обзор современных методов проектирования большой интегральной схемы, маршрут ее проектирования на основе базового матричного кристалла. Разработка алгоритма и его программная реализации, анализ его достоинств и недостатков. Разработка топологии таймера.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 03.10.2017 |
Размер файла | 277,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
default: PROG_LOV;
}
}
} else RabStack.Push(Obj);
}
}
BOOL ok = TRUE;
if (kolPrivNeobhod > kolPrivSvob) {
ok = FALSE;
char msg[512];
wsprintf(msg, GetModule()->LoadString(IDS_UNDER_FR_SMALL_PRIV).c_str(),PtrTekFr->Name,
kolPrivNeobhod - kolPrivSvob, toupper(typePriv));
MessageBox(msg, GetModule()->GetName(), MB_OK | MB_ICONSTOP);
}
return ok;
}
// Расчет силы связности с областью А для всех элементов списка.
int
ZRazmWindow::MSilaF(TIArrayAsVector<ZPsh> *ASp)
{
int A,kol=0;
ZPsh *obj,*obj2;
float SilaF;
int xxx=0;
TIArrayAsVectorIterator<ZPsh> iter(*ASp);
while (iter!=0) {
obj=iter++;
if (!obj->NomMassiv) {
kol;
SilaF=0;
xxx++;
for (int kont=0; kont < obj->KolKontPsh; kont++) {
A=0;
TIListIteratorImp<ZPsh> iter2(*(obj->SpIncidYach[kont]));
iter2.Restart();
kol=obj->SpIncidYach[kont]->GetItemsInContainer();
for (int daff=0; daff< kol; daff++) {
obj2=iter2++;
if (obj2->NomMassiv==1 || obj2->PrivYach!=0) A++;
}
if (A>0) {
if (kol-A) SilaF+= 1/(kol-A)*(obj->KolVFakt);
else SilaF+= 2* obj->KolVFakt;
}
}
obj->SilaF=SilaF;
}
}
return xxx;
}
// Возвращает элемент с максимальной связностью с областью А.
ZPsh*
ZRazmWindow::MaxSila(TIArrayAsVector<ZPsh> *ASp,ZPsh *RodPshPred)
{
ZPsh *RabFr,*obj;
RabFr=NULL;
float MSila=-1000;
TIArrayAsVectorIterator<ZPsh> iter(*ASp);
iter.Restart();
while (iter!=0) {
obj=iter++;
if (!obj->NomMassiv) {
if ((MSila < obj->SilaF) || (MSila==obj->SilaF && obj->PtrRoditPsh==RodPshPred)) {
RabFr=obj;
MSila=obj->SilaF;
}
}
}
return RabFr;
}
// Устанавливает порядок размещения ячеек.
void
ZRazmWindow::SortirSpiska(TIArrayAsVector<ZPsh> *BazArray)
{
ZPsh *Obj1,*RodPsh;
TIArrayAsVector<ZPsh> *RabAr;
RabAr = new TIArrayAsVector<ZPsh>(20,0,5);
Obj1=(*BazArray)[0];
RodPsh = PtrTekFr;
while (Obj1!=NULL) {
MSilaF(BazArray);
Obj1=MaxSila(BazArray,RodPsh);
if (Obj1!=NULL){
Obj1->NomMassiv=1;
RabAr->Add(Obj1);
RodPsh=Obj1->PtrRoditPsh;
}
}
BazArray->Flush(TShouldDelete::NoDelete);
TIArrayAsVectorIterator<ZPsh> iter(*RabAr);
while (iter!=0) {
Obj1=iter++;
Obj1->NomMassiv=0;
BazArray->Add(Obj1);
}
RabAr->Flush(TShouldDelete::NoDelete);
delete RabAr;
}
// Выполняет привязку одной ячейки.
void
ZRazmWindow::PrivOdnojYach(TIListImp<ZPriv> *BazList, ZPsh *Yach, BOOL Zamesch, ZPriv *OldPriv,
TIArrayAsVector<ZPriv> *RabListXY, TIArrayAsVector<ZPriv> *RabListYX)
{
if (Yach->PrivYach) return;
ZPriv *RPr2,*RPr3,*RPr;
int minsum = 30000;
int SummaDl,Ogran;
int NomInArr;
BOOL FlagModified,FlModBlok;
if (Zamesch) Ogran=2;
else Ogran=1;
if (OldPriv!=NULL) RPr = OldPriv;
else {
RPr = (*RabListXY)[0];
OldPriv=RPr;
}
FlagModified=TRUE;
while (FlagModified) {
FlagModified=FALSE;
RPr2=RPr;
FlModBlok=TRUE;
while (FlModBlok){ // X++ Y++
FlModBlok = FALSE;
NomInArr=RabListXY->Find(RPr2);
if (NomInArr< RabListXY->GetItemsInContainer()-1) {
RPr3=(*RabListXY)[NomInArr+1];
if (RPr2->XPriv != RPr3->XPriv) {
NomInArr=RabListYX->Find(RPr2);
if (NomInArr< RabListYX->GetItemsInContainer()-1)
RPr3=(*RabListYX)[NomInArr+1];
else RPr3=NULL;
}
if (RPr3!=NULL){
SummaDl=SummaDln(Yach,RPr3,FALSE);
if (SummaDl<minsum) {
FlModBlok = TRUE;
if (!PoleRazm->ErrorAvtPrivYach(Yach, RPr3->XPriv,RPr3->YPriv, RPr3, BazList)){
minsum=SummaDl;
RPr=RPr3;
FlagModified=TRUE;
}
RPr2=RPr3;
}
}
}
}
RPr2=RPr;
FlModBlok=TRUE;
while (FlModBlok){ // Y++ X--
FlModBlok = FALSE;
NomInArr=RabListYX->Find(RPr2);
if (NomInArr< RabListYX->GetItemsInContainer()-1) {
RPr3=(*RabListYX)[NomInArr+1];
if (RPr2->YPriv != RPr3->YPriv) {
NomInArr=RabListXY->Find(RPr2);
if (NomInArr>0) RPr3=(*RabListXY)[NomInArr-1];
else RPr3=NULL;
}
if (RPr3!=NULL){
SummaDl=SummaDln(Yach,RPr3,FALSE);
if (SummaDl<minsum) {
FlModBlok = TRUE;
if (!PoleRazm->ErrorAvtPrivYach(Yach, RPr3->XPriv,RPr3->YPriv, RPr3, BazList)){
minsum=SummaDl;
RPr=RPr3;
FlagModified=TRUE;
}
RPr2=RPr3;
}
}
}
}
RPr2=RPr;
FlModBlok=TRUE;
while (FlModBlok){ // X-- Y--
FlModBlok = FALSE;
NomInArr=RabListXY->Find(RPr2);
if (NomInArr>0) {
RPr3=(*RabListXY)[NomInArr-1];
if (RPr2->XPriv != RPr3->XPriv) {
NomInArr=RabListYX->Find(RPr2);
if (NomInArr>0) RPr3=(*RabListYX)[NomInArr-1];
else RPr3=NULL;
}
if (RPr3!=NULL){
SummaDl=SummaDln(Yach,RPr3,FALSE);
if (SummaDl<minsum) {
FlModBlok = TRUE;
if (!PoleRazm->ErrorAvtPrivYach(Yach, RPr3->XPriv,RPr3->YPriv, RPr3, BazList)){
minsum=SummaDl;
RPr=RPr3;
FlagModified=TRUE;
}
RPr2=RPr3;
}
}
}
}
RPr2=RPr;
FlModBlok=TRUE;
while (FlModBlok){ // Y-- X++
FlModBlok = FALSE;
NomInArr=RabListYX->Find(RPr2);
if (NomInArr>0) {
RPr3=(*RabListYX)[NomInArr-1];
if (RPr2->YPriv != RPr3->YPriv) {
NomInArr=RabListXY->Find(RPr2);
if (NomInArr< RabListXY->GetItemsInContainer()-1)
RPr3=(*RabListXY)[NomInArr+1];
else RPr3=NULL;
}
if (RPr3!=NULL){
SummaDl=SummaDln(Yach,RPr3,FALSE);
if (SummaDl<minsum) {
FlModBlok = TRUE;
if (!PoleRazm->ErrorAvtPrivYach(Yach, RPr3->XPriv,RPr3->YPriv, RPr3, BazList)){
minsum=SummaDl;
RPr=RPr3;
FlagModified=TRUE;
}
RPr2=RPr3;
}
}
}
}
} // FlagModified
int x, y;
int dx, dy;
GetDxDyPriv(dx, dy);
int Delta=1, maxDelta=3;
RPr3=NULL;
if (ProvNalosh(Yach,RPr)>=Ogran) {
minsum=30000;
BOOL FlEnd = FALSE;
while ((RPr3==NULL && !FlEnd) || Delta <= maxDelta){
for (x= RPr->XPriv - Delta*dx; x<= RPr->XPriv + Delta*dx; x+=dx){
RPr2=PoleRazm->FindPrivKoord(x, RPr->YPriv - Delta*dy);
if (RPr2!=NULL){
if (!PoleRazm->ErrorAvtPrivYach(Yach, RPr2->XPriv,RPr2->YPriv, Rpr2,BazList)){
if (ProvNalosh(Yach,RPr2)<Ogran) {
SummaDl=SummaDln(Yach,RPr2,FALSE);
if (SummaDl<minsum) {
minsum=SummaDl;
RPr3=RPr2;
}
}
}
}
}
for (x= RPr->XPriv - Delta*dx; x<= RPr->XPriv + Delta*dx; x+=dx){
RPr2=PoleRazm->FindPrivKoord(x, RPr->YPriv + Delta*dy);
if (RPr2!=NULL){
if (!PoleRazm->ErrorAvtPrivYach(Yach, RPr2->XPriv,RPr2->YPriv, RPr2, BazList)){
if (ProvNalosh(Yach,RPr2)<Ogran) {
SummaDl=SummaDln(Yach,RPr2,FALSE);
if (SummaDl<minsum) {
minsum=SummaDl;
RPr3=RPr2;
}
}
}
}
}
for (y= RPr->YPriv - (Delta-1)*dy; y<= RPr->YPriv + (Delta-1)*dy; y+=dy){
RPr2=PoleRazm->FindPrivKoord(RPr->XPriv - Delta*dx, y);
if (RPr2!=NULL){
if (!PoleRazm->ErrorAvtPrivYach(Yach, RPr2->XPriv, RPr2->YPriv, RPr2, BazList)){
if (ProvNalosh(Yach,RPr2)<Ogran) {
SummaDl=SummaDln(Yach,RPr2,FALSE);
if (SummaDl<minsum) {
minsum=SummaDl;
RPr3=RPr2;
}
}
}
}
}
for (y= RPr->YPriv - (Delta-1)*dy; y<= RPr->YPriv + (Delta-1)*dy; y+=dy){
RPr2=PoleRazm->FindPrivKoord(RPr->XPriv + Delta*dx, y);
if (RPr2!=NULL){
if (!PoleRazm->ErrorAvtPrivYach(Yach, RPr2->XPriv,RPr2->YPriv, RPr2, BazList)){
if (ProvNalosh(Yach,RPr2)<Ogran) {
SummaDl=SummaDln(Yach,RPr2,FALSE);
if (SummaDl<minsum) {
minsum=SummaDl;
RPr3=RPr2;
}
}
}
}
}
Delta++;
if (RPr->XPriv - Delta*dx < MinX && RPr->XPriv + Delta*dx > MaxX &&
RPr->YPriv - Delta*dy < MinY && RPr->YPriv + Delta*dy > MaxY)
FlEnd = TRUE;
} // while
if (RPr3!=NULL) RPr=RPr3;
else RPr=NULL;
} // ProvNalosh
if (RPr!=NULL) {
TDC& DC = PoleRazm->SetDC(TClientDC(*PoleRazm));
PoleRazm->RazmYach(DC, Yach, RPr, ZPsh::NoFixed);
Yach->OldPrivYach=NULL;
}
}
// Проверка наложения ячеек.
int
ZRazmWindow::ProvNalosh(ZPsh *PrPsh,ZPriv *PrPriv)
{
int situation=0;
ZPriv *RabPriv;
ZNstYach nstYach(PrPsh->Name, &TPoint(PrPriv->XPriv, PrPriv->YPriv));
for (int i=0; i< nstYach.kol_pokr_toch_priv; i++) {
RabPriv = PoleRazm->FindPrivKoord(nstYach.pokr_toch_priv[i].x, nstYach.pokr_toch_priv[i].y);
if (RabPriv!=NULL) {
if (RabPriv->Yach!=NULL) situation=2;
}
else situation=3;
}
return situation;
}
ZPriv*
ZRazmWindow::Mediana(ZPsh *Obj)
{
struct RectObl {
int XMin;
int YMin;
int XMax;
int YMax;
};
int kol,Xcp,Ycp,N;
ZPriv *RPr,*RabPriv;
ZPsh *PromObj;
RectObl Oblast;
RPr=NULL;
kol=Obj->KolKontPsh;
Xcp=0;
Ycp=0;
N=0;
for (int i=0;i<kol;i++){
Oblast.XMax= 0;
Oblast.YMax= 0;
Oblast.XMin= GlobalData->GetNstBMK()->gabarit_x_bmk;
Oblast.YMin= GlobalData->GetNstBMK()->gabarit_y_bmk;
TIListIteratorImp<ZPsh> irr(*(Obj->SpIncidYach[i]));
while (irr!=0){
PromObj=irr++;
if (PromObj->PrivYach!=NULL) RabPriv=PromObj->PrivYach;
else RabPriv=PromObj->OldPrivYach;
if (RabPriv!=NULL){
if (Oblast.XMax< RabPriv->XPriv) Oblast.XMax= RabPriv->XPriv;
if (Oblast.YMax< RabPriv->YPriv) Oblast.YMax= RabPriv->YPriv;
if (Oblast.XMin> RabPriv->XPriv) Oblast.XMin= RabPriv->XPriv;
if (Oblast.YMin> RabPriv->YPriv) Oblast.YMin= RabPriv->YPriv;
}
}
if (Oblast.XMax>=Oblast.XMin) {
Xcp+=Oblast.XMax+Oblast.XMin;
Ycp+=Oblast.YMax+Oblast.YMin;
N+=2;
}
}
if (N!=0){
Xcp= ceil(Xcp/N);
Ycp= ceil(Ycp/N);
RPr= PoleRazm->FindNearPriv(Xcp, Ycp);
}
return RPr;
}
// Оптимизация N3.
void
ZRazmWindow::Optimize3(TIArrayAsVector<ZPsh> *RabAr, TIListImp<ZPriv> *RabList)
{
ZPsh *Obj,*OkPsh;
int iii,InCont;
float procent;
ZPriv *HranPriv,*OkPriv;
TIArrayAsVectorIterator<ZPsh> itr(*RabAr);
iii=0;
InCont=RabAr->GetItemsInContainer();
while (itr!=0){
Obj=itr++;
iii++;
OkPsh=Obmen(Obj,RabList);
if (OkPsh!=NULL) {
if (OkPsh==Obj) OkPriv=OkPsh->OldPrivYach;
else OkPriv=OkPsh->OldPrivYach;
}
else OkPriv=NULL;
if (OkPriv!=NULL){
TDC& DC = PoleRazm->SetDC(TClientDC(*PoleRazm));
HranPriv=Obj->PrivYach;
PoleRazm->DeleteRazmYach(DC,Obj->PrivYach,FALSE);
if (OkPsh!=NULL && OkPsh!=Obj){
PoleRazm->DeleteRazmYach(DC,OkPsh->PrivYach,FALSE);
PoleRazm->RazmYach(DC, OkPsh, HranPriv, ZPsh::NoFixed);
}
PoleRazm->RazmYach(DC, Obj, OkPriv, ZPsh::NoFixed);
}
procent=100.0*iii/InCont;
SetTextState(StateOptim->ProcentOptim, procent);
}
}
ZPsh*
ZRazmWindow::Obmen(ZPsh *First,TIListImp<ZPriv> *RabList)
{
ZPsh *HranPsh,*OkPsh;
int Nalosh,OldSum,NewSum,DopSum,MinSum;
ZPriv *RPr,*RPriv,*NachPriv,*OkPriv,*FirstPriv;
OkPriv=NULL;
OkPsh=NULL;
MinSum=30000;
int dx, dy;
GetDxDyPriv(dx, dy);
if (First->PrivYach!=NULL){
RPriv=Mediana(First);
FirstPriv=First->PrivYach;
OldSum=SummaDln(First,FirstPriv,FALSE);
if (RPriv!=NULL){
for (int i=RPriv->XPriv - dx; i<= RPriv->XPriv + dx; i+=dx){
for (int j=RPriv->YPriv - dy; j<= RPriv->YPriv + dy; j+=dy){
RPr=PoleRazm->FindPrivKoord(i,j);
if (RPr!=NULL){
// Поднимаем 1 ячейку с 1 привязки
RazmOrDelPsh(First,FirstPriv,FALSE);
Nalosh=ProvNalosh(First,RPr);
if (Nalosh==2){
if (RPr->Yach!=NULL){
NachPriv= PoleRazm->GetNachPriv(RPr);
HranPsh=NachPriv->Yach;
DopSum=SummaDln(HranPsh,NachPriv,FALSE);
// Поднимаем 2 ячейку со 2 привязки
RazmOrDelPsh(HranPsh,NachPriv,FALSE);
if (ProvNalosh(First,RPr)==0 && !PoleRazm->ErrorAvtPrivYach(First,RPr->XPriv, RPr->YPriv, RPr, RabList)){
//Опускаем 1 на 2
RazmOrDelPsh(First,RPr,TRUE);
if (ProvNalosh(HranPsh,FirstPriv)==0 && !PoleRazm->ErrorAvtPrivYach(HranPsh, FirstPriv->XPriv,
FirstPriv->YPriv, FirstPriv, RabList)){
NewSum= SummaDln(HranPsh,FirstPriv,FALSE)+SummaDln(First,RPr,FALSE);
if (OldSum+DopSum>NewSum && MinSum>NewSum) {
MinSum=NewSum;
OkPriv=RPr;
OkPsh=HranPsh;
}
}
//Поднимаем 1 с 2
RazmOrDelPsh(First,RPr,FALSE);
}
//Опускаем 2 на 2
RazmOrDelPsh(HranPsh,NachPriv,TRUE);
}
}
else {
if (!(PoleRazm->ErrorAvtPrivYach(First, RPr->XPriv,RPr->YPriv, RPr, RabList)) &&
SummaDln(First,RPr,FALSE)< OldSum) {
OkPriv=RPr;
OkPsh=NULL;
MinSum=0;
}
}
//Опускаем 1 на 1
RazmOrDelPsh(First,FirstPriv,TRUE);
}
} // for j
} // for i
}
}
if (OkPriv!=NULL){
if (OkPsh==NULL) OkPsh=First;
OkPsh->OldPrivYach=OkPriv;
}
return OkPsh;
}
void
ZRazmWindow::RazmOrDelPsh(ZPsh *RabPsh,ZPriv *RabPriv,BOOL FlRazm)
{
ZPriv *tmpPriv;
if (FlRazm==TRUE){
RabPriv->Yach=RabPsh;
RabPsh->PrivYach=RabPriv;
RabPriv->FlagNachYach=TRUE;
ZNstYach nstYach(RabPsh->Name, &TPoint(RabPriv->XPriv, RabPriv->YPriv));
for (int i=1; i< nstYach.kol_pokr_toch_priv; i++) {
tmpPriv = PoleRazm->FindPrivKoord(nstYach.pokr_toch_priv[i].x,nstYach.pokr_toch_priv[i].y);
if (!tmpPriv) PROG_LOV;
tmpPriv->Yach=RabPsh;
}
}
else {
RabPriv->Yach=NULL;
RabPsh->PrivYach=NULL;
RabPriv->FlagNachYach=FALSE;
ZNstYach nstYach(RabPsh->Name, &TPoint(RabPriv->XPriv, RabPriv->YPriv));
for (int i=1; i< nstYach.kol_pokr_toch_priv; i++) {
tmpPriv = PoleRazm->FindPrivKoord(nstYach.pokr_toch_priv[i].x, nstYach.pokr_toch_priv[i].y);
if (!tmpPriv) PROG_LOV;
tmpPriv->Yach=NULL;
}
}
}
void
ZRazmWindow::OptimizePerif(TIArrayAsVector<ZPsh>& SpHranPsh, TIListImp<ZPriv>& SpHranPriv)
{
ZPsh *Obj,*Obj2;
ZPriv *HranPriv1,*RabPriv;
int Sum1_1,Sum2_2,Sum1_2,Sum2_1,Delta,DeltaOld;
TIArrayAsVectorIterator<ZPsh> it1(SpHranPsh);
TIListIteratorImp<ZPriv> it2(SpHranPriv);
StateOptim->State->SetText("Оптимизация Z-яч.");
for (int i=0;i<3;i++){
it1.Restart();
while (it1!=0){
Obj=it1++;
DeltaOld=0;
Sum1_1=SummaDln(Obj,Obj->PrivYach,FALSE);
it2.Restart();
while (it2!=0){
RabPriv=it2++;
if (RabPriv->Yach==NULL){
Sum1_2=SummaDln(Obj,RabPriv,FALSE);
Delta=Sum1_1-Sum1_2;
if (Delta > DeltaOld){
TDC& DC = PoleRazm->SetDC(TClientDC(*PoleRazm));
PoleRazm->DeleteRazmYach(DC,Obj->PrivYach,FALSE);
PoleRazm->RazmYach(DC,Obj, RabPriv, ZPsh::NoFixed);
DeltaOld=Delta;
}
}
else {
if (RabPriv!=Obj->PrivYach){
Obj2=RabPriv->Yach;
Sum2_2=SummaDln(Obj2,RabPriv,FALSE);
Sum1_2=SummaDln(Obj,RabPriv,FALSE);
Sum2_1=SummaDln(Obj2,Obj->PrivYach,FALSE);
Delta=Sum1_1+Sum2_2-Sum1_2-Sum2_1;
if (Delta > DeltaOld){
TDC& DC = PoleRazm->SetDC(TClientDC(*PoleRazm));
HranPriv1=Obj->PrivYach;
PoleRazm->DeleteRazmYach(DC,HranPriv1,FALSE);
PoleRazm->DeleteRazmYach(DC,RabPriv,FALSE);
PoleRazm->RazmYach(DC, Obj, RabPriv, ZPsh::NoFixed);
PoleRazm->RazmYach(DC, Obj2, HranPriv1, ZPsh::NoFixed);
DeltaOld=Delta;
}
}
}
}
}
}
it1.Restart();
while (it1){
Obj=it1++;
Obj->InMassiv=FALSE;
}
}
void
ZRazmWindow::CmColorRaskras()
{
if (MessageBox(GetModule()->LoadString(IDS_SETUP_COLOR_PSH).c_str(),
GetModule()->GetName(), MB_YESNO | MB_ICONQUESTION) != IDYES)
return;
const kolColors = 36;
const COLORREF colors[] = {
RGB( 0, 255, 0), // LtGreen
RGB( 0, 0, 255), // LtBlue
RGB(255, 0, 0), // LtRed
RGB(255, 0, 255), // LtMagenta
RGB( 0, 255, 255), // LtCyan
RGB(192, 192, 192), // LtGray
RGB(128, 128, 128), // Gray
RGB(255, 128, 128),
RGB(255, 128, 0),
RGB(128, 64, 0),
RGB(128, 128, 0),
RGB(128, 255, 0),
RGB( 0, 128, 0),
RGB(128, 128, 64),
RGB( 0, 255, 128),
RGB(192, 220, 192),
RGB( 0, 128, 128),
RGB( 0, 128, 64),
RGB(128, 255, 255),
RGB( 64, 128, 128),
RGB( 0, 128, 255),
RGB(164, 200, 240),
RGB(128, 128, 255),
RGB(255, 128, 192),
RGB(128, 0, 128),
RGB(255, 128, 255),
RGB(255, 0, 128),
RGB(128, 0, 255),
RGB(128, 0, 0),
RGB(128, 64, 64),
RGB( 0, 64, 64),
RGB( 0, 64, 128),
RGB( 0, 0, 128),
RGB(128, 0, 64),
RGB( 64, 0, 64),
RGB( 64, 0, 128)
};
int indexColor=0;
for (int i=0; i < PtrTekFr->SostavPsh->GetItemsInContainer(); i++) {
ZPsh* Obj = (*PtrTekFr->SostavPsh)[i];
if (!Obj->IsYach()) {
SetColorPsh(Obj, colors[indexColor], "Bk");
indexColor++;
if (indexColor==kolColors) indexColor=0;
}
}
}
unsigned long
ZRazmWindow::ShowSummaSv(TIArrayAsVector<ZPsh> *SpHranPsh)
{
unsigned longObschDl = GetSummaSv(SpHranPsh);
SetTextState(StateOptim->KriterOptim, ObschDl);
return ObschDl;
}
unsigned long
ZRazmWindow::GetSummaSv(TIArrayAsVector<ZPsh> *SpHranPsh)
{
ZPsh *Obj;
unsigned longObschDl;
ObschDl=0;
TIArrayAsVectorIterator<ZPsh> iir(*SpHranPsh);
while (iir!=0) {
Obj=iir++;
if (Obj->PrivYach!=NULL) {
ObschDl+=SummaDln(Obj, Obj->PrivYach, TRUE);
}
}
return ObschDl;
}
void
ZRazmWindow::SetTextState(TStatic* item, unsigned long value)
{
char buf[20];
item->SetText(ultoa(value, buf, 10));
}
void
ZRazmWindow::SetTextState(TStatic* item, float value)
{
char buf[20];
sprintf(buf, "%.1f %%", value);
item->SetText(buf);
}
// Определяет расстояние между соседними точками привязки внутри поля БМК.
void
ZRazmWindow::GetDxDyPriv(int& dx, int& dy)
{
const ZNstBMK& bmk = *GlobalData->GetNstBMK();
DOP_PRIV_YACH *priv1, *priv2;
dx =0;
dy =0;
for (int i=0; i< bmk.dop_priv_yach->GetItemsInContainer()-1 && (!dx || !dy); i++) {
priv1 = (*bmk.dop_priv_yach)[i];
priv2 = (*bmk.dop_priv_yach)[i+1];
if (!priv1->perif && !priv2->perif) {
if (!dx) dx = abs(priv1->x - priv2->x);
if (!dy) dy = abs(priv1->y - priv2->y);
}
}
if (!dx || !dy) PROG_LOV;
}
void
ZRazmWindow::CmFixYach()
{
FixYach(TRUE);
}
void
ZRazmWindow::CmUnfixYach()
{
FixYach(FALSE);
}
void
ZRazmWindow::CmFixFr()
{
FixFr(TRUE);
}
void
ZRazmWindow::CmUnfixFr()
{
FixFr(FALSE);
}
void
ZRazmWindow::CmSelFixYach()
{
SelFixYach(TRUE);
}
void
ZRazmWindow::CmSelNofixYach()
{
SelFixYach(FALSE);
}
// Закрепляет или открепляет размещение выделенных ячеек.
void
ZRazmWindow::FixYach(BOOL fix)
{
char msg[512]; ZPsh *obj;
TIListIteratorImp<ZPsh> iter(*PoleRazm->SpSelYach);
while (iter!=0) {
obj=iter++;
obj->IsFixed = fix;
}
ZFrameMonitor* frame = TYPESAFE_DOWNCAST(GetApplication()->GetMainWindow(), ZFrameMonitor);
if (!frame) PROG_LOV;
wsprintf(msg, GetModule()->LoadString((fix) ? IDS_FIX_YACH : IDS_UNFIX_YACH).c_str(),
PoleRazm->SpSelYach->GetItemsInContainer());
frame->SetTextSLine(msg);
if (PoleRazm->SpSelYach->GetItemsInContainer()) Modif = TRUE;
}
// Закрепляет или открепляет выделенный фрагмент.
// Статус ячеек фрагмента при этом не изменяется!
void
ZRazmWindow::FixFr(BOOL fix)
{
TIStackAsList<ZPsh> StackFr;
ZPsh *RodObj, *Obj;
ZPsh* PtrSelFr = GetPtrSelFr();
if (!PtrSelFr) return;
StackFr.OwnsElements(0);
StackFr.Push(PtrSelFr);
while (!StackFr.IsEmpty()) {
RodObj = StackFr.Pop();
RodObj->IsFixed = fix;
for (int i=0; i<RodObj->SostavPsh->GetItemsInContainer(); i++) {
Obj = (*(RodObj->SostavPsh))[i];
if (!Obj->IsYach()) StackFr.Push(Obj);
}
}
PoleUpr->PaintSpFr();
Modif = TRUE;
char msg[512];
int ids = (fix) ? IDS_FIX_FR : IDS_UNFIX_FR;
wsprintf(msg, GetModule()->LoadString(ids).c_str(), PtrSelFr->Name);
MessageBox(msg, GetModule()->GetName(), MB_OK | MB_ICONINFORMATION);
}
// Выделяет все фиксированные или нефиксированные ячейки текущего фрагмента.
// Текущий режим выбора ячеек (YACH, FR или RECT) не изменяется!
void
ZRazmWindow::SelFixYach(BOOL fixYach)
{
// Для блокировки возможности перемещения и удаления отдельных ячеек.
TypOper = OPR_SELECT;
TIStackAsList<ZPsh> StackFr;
ZPsh *RodObj, *Obj;
StackFr.OwnsElements(0);
StackFr.Push(PtrTekFr);
int kolSel = 0;
while (!StackFr.IsEmpty()) {
RodObj = StackFr.Pop();
for (int i=0; i<RodObj->SostavPsh->GetItemsInContainer(); i++) {
Obj=(*(RodObj->SostavPsh))[i];
if (Obj->IsYach()) {
if (Obj->PrivYach && Obj->IsFixed == fixYach) {
if (Obj->PrivYach->Select || PoleRazm->SelectYach(Obj->PrivYach, TRUE, TRUE)) kolSel++;
}
} else StackFr.Push(Obj);
}
}
char msg[512];
int ids = (fixYach) ? IDS_KOL_SEL_FIX_YACH : IDS_KOL_SEL_NOFIX_YACH;
wsprintf(msg, GetModule()->LoadString(ids).c_str(), PtrTekFr->Name, kolSel);
ZFrameMonitor* frame = TYPESAFE_DOWNCAST(GetApplication()->GetMainWindow(), ZFrameMonitor);
if (!frame) PROG_LOV;
frame->SetTextSLine(msg);
}
Схема TIMER
????????? ?? Allbest.ru
Подобные документы
Разработка интерфейса справочно-расчетного программного обеспечения. Расчетно-графический модуль. Решение задачи динамического моделирования в системе MATLAB/Simulink. Программная реализация, результаты моделирования системы на текстовых примерах.
курсовая работа [2,6 M], добавлен 01.12.2014Выбор схемотехники, уровня технологии, топологии базового матричного кристалла. Определение компоновочных параметров логической схемы и функционального быстродействия. Принципы обеспечения помехоустойчивости. Расчет конструкции коммутационного элемента.
контрольная работа [627,5 K], добавлен 24.06.2012Изучение основных видов угроз программного обеспечения. Выявление наиболее эффективных средств и методов защиты программного обеспечения. Анализ их достоинств и недостатков. Описания особенностей лицензирования и патентования программного обеспечения.
курсовая работа [67,9 K], добавлен 29.05.2013Разработка конфигурации службы. Исследование вычислительной эффективности алгоритма оптимизации. Программная реализация клиент-серверного приложения. Алгоритм решения непрерывной задачи загрузки рюкзака. Подключение веб-сервиса к клиентскому приложению.
курсовая работа [1,4 M], добавлен 21.01.2017Цементирование обсадных колонн нефтяных скважин. Состав информационного обеспечения программного комплекса автоматизированного проектирования. Реализация инфологической модели и организация взаимодействия программного обеспечения с базой данных.
дипломная работа [2,3 M], добавлен 22.07.2013Создание программного обеспечения для реализации алгоритма, позволяющего находить кратчайшее расстояние от одной из вершин графа до всех остальных, при условии, что ребра графа не имеют отрицательного веса. Примеры выполнения алгоритма Дейкстра.
курсовая работа [1,1 M], добавлен 11.01.2015Разработка алгоритма поставленной задачи и реализация средствами автоматизированного проектирования. Составление программного продукта на основе готовой спецификации на уровне модуля, проведение его тестирования, использование инструментальных средств.
контрольная работа [257,5 K], добавлен 01.05.2015Изучение схемы однокристального микроконтроллера Temic 80C51, анализ основных принципов действия шаговых двигателей. Разработка блока управления шаговыми двигателями и печатающей головкой простого матричного принтера. Создание программного обеспечения.
курсовая работа [552,7 K], добавлен 24.12.2012Обзор методов и средств по созданию и проектированию Web–сайтов. Языки программирования для создания Web–сайтов. Анализ достоинств и недостатков систем управления сайтом CMS. Разработка дизайна и макета сайта. Расчет затрат на разработку продукта.
дипломная работа [1,1 M], добавлен 02.06.2016Анализ современных информационных технологий цехового планирования. Разработка математической модели объекта проектирования. Формализация модели бизнес-процесса АРМа цехового плановика. Детальная разработка модулей программного продукта планирования.
дипломная работа [4,9 M], добавлен 29.06.2012