Построение электрических схем в С++Builder
Задание
программа графический электрическая
схема
Составить программу на языке программирования C++Builder
для построения электрической схемы, изображенной на рис.1
Рисунок 1-Исходная схема
Теоретические сведения
Методы изображения графических
элементов
Любая картинка, чертеж или схема могут
рассматриваться как совокупность графических примитивов. Примитивы, условно
можно разделить на группы: примитивы рисования контуров и площадные фигуры. К
примитивам контуров относятся: линии (line),прямоугольники
(rectangle)Б дуги (arc),
окружности (circle), эллипсы (ellipse),
многоугольники (drawpoly)
и прочие не закрашиваемые внутри фигуры.
К площадным, заполняемым внутри фигурам,
относятся закрашиваемые прямоугольники (FillRect),
круговые и эллиптические секторы (Pie).
Если у вас рисуемая фигура замкнута, но не закрашиваемая, например,
многоугольник (Poligon),
то его всегда можно заштриховать с помощью функций закраски (FloodFill,
FillStyle). Для выбора цвета
рисования применяется функция задания цвета графических примитивов (Pen->Color).
Линия
Вычерчивание прямой линии выполняет метод LineTo.
Метод рисует линию из той точки, в которой в данный момент находится карандаш
(эта точка называется текущей позицией карандаша или просто текущей), в точку,
координаты которой указаны в инструкции вызова метода. Например, команда:
Image1->Canvas->LineTo(100,200);
Рисует линию в точку с координатами (100,200),
после чего текущей становится точка с координатами (100,200).
Начальную точку линии можно задать, переместив
карандаш в нужную точку графической поверхности. Это возможно сделать при
помощи метода MoveTо, указав в
качестве параметров, координаты точки начала линии. Например, операторы:
Image1->Canvas->MoveTo(10,10);
Image1->Canvas->LineTo(50,10);
Рисуют горизонтальную линию из точки (10,10) в
точку (50,10).
Используя свойство текущей точки, можно
нарисовать ломаную линию.
Например, операторы:
Image1->Canvas->LineTo(50,10);->Canvas->LineTo(10,20);1->Canvas->LineTo(50,20);
Рисуют линию, похожую на букву Z.
Прямоугольник
Метод Rectangle
вычерчивает прямоугольник. В инструкции вызова метода надо указать координаты двух
точек - углов прямоугольника. Например, команда:
Image1->Canvas->Rectangle(10,10,50,50);
Рисует квадрат, левый верхний угол которого
находится в точке (10,10), а правый нижний в точке (50,50).
Цвет, вид и ширину линии контура прямоугольника
определяют значения свойства Pen,
а цвет и стиль заливки области внутри прямоугольника - значение свойства Brush
той поверхности, на которой метод рисует прямоугольник.
Есть еще два метода, которые вычерчивают
прямоугольник. Метод FillRect
вычерчивает закрашенный прямоуголник, используя в качестве инструмента только
кисть (Brush), а метод FrameRect
- только контур и использует только карандаш (Pen).
У этих методов только один параметр - структура типа Rect.
Окружность в эллипс
Нарисовать эллипс или окружность (частный случай
эллипса) можно при помощи метода Ellipse.
Инструкция выхова метода в общем виде выглядит следующим образом:
Image1->Canvas->Ellipse(x1,y1,x2,y2)
Параметры x1,y1,x2,y2
определяют координаты прямоугольника, внутри которого вычерчивается эллипс или,
если прямоугольник является квадратом,- окружность.
Вместо четырех параметров - координат
диагональных углов прямоугольника - методу Ellipse
можно передать один - объект типа Rect.
Следующий фрагмент кода демонстрирует использование объекта TRect
в качестве параметра метода Ellipse.
TRect
rec=Rect(10,10,50,50);->Canvas->Ellipse(rec);
Как в случае вычерчивания других примитивов, вид
контура эллипса (цвет, толщину и стильлинии) определяют значения свойства Pen,
а цвет и стиль заливки области внутри эллипса - -значения свойства Brush
той поверхности (Canvas),
на которой метод чертит.
Дуга
Метод Arc
рисует дугу - часть эллипса. Инструкция вызова метода в общем виде выглядит
так:
Image1->Canvas->Arc(x1,y1,x2,y2,x3,y3,x4,y4);
Параметры x1,y1,x2,y2
определяют эллипс, частью которого является дуга. Параметры x3
и y3 задают начальную,
а x4 и y4
- конечную точку дуги. Начальная (конечная) точка дуги - это точка пересечения
границы эллипса и прямой, проведенной из центра эллипса в точку с координатами x3
и y3(x4,y4).
Метод Arc вычерчивает
дугу против часовой стрелки от начальной точки до конечной.
Текст
Image1->Canvas->TextOut(x,y,Текст)
Параметр текст задает выводимый текст. Параметры
x и y
определяют координаты точки графической поверхности,от которой выполняется
вывод текста.
Форма проекта
Текст программы
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource
"*.dfm"*Form1;
//---------------------------------------------------------------------------
__fastcall
TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
__fastcall
TForm1::Button1Click(TObject *Sender)
{TPoint
p[3];[0].x=150;p[0].y=40;[1].x=145;p[1].y=45;[2].x=155;p[2].y=45;->Canvas->Brush->Color=clBlack;->Canvas->Polygon(p,2);//отображает
многоульник->Canvas->MoveTo(150,45);->Canvas->LineTo(150,65);->Canvas->Brush->Color=clWhite;->Canvas->Rectangle(155,65,145,90);//отображает
прямоугольник->Canvas->MoveTo(150,90);->Canvas->LineTo(150,105);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(147,105,153,111);//отображает
точка->Canvas->MoveTo(150,108);->Canvas->LineTo(170,108);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(167,105,173,111);->Canvas->MoveTo(170,108);->Canvas->LineTo(210,108);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(207,105,213,111);->Canvas->MoveTo(210,108);->Canvas->LineTo(220,108);->Canvas->Brush->Color=clWhite;->Canvas->Rectangle(220,103,245,113);->Canvas->MoveTo(245,108);->Canvas->LineTo(265,108);->Canvas->MoveTo(265,101);
//конденсатор->Canvas->LineTo(265,115);->Canvas->MoveTo(268,101);//конденсатор->Canvas->LineTo(268,115);->Canvas->MoveTo(268,108);->Canvas->LineTo(290,108);p1[3];[0].x=295;p1[0].y=108;[1].x=290;p1[1].y=103;[2].x=290;p1[2].y=113;->Canvas->Brush->Color=clBlack;->Canvas->Polygon(p1,2);->Canvas->MoveTo(210,108);->Canvas->LineTo(210,125);->Canvas->MoveTo(203,125);//конденсатор->Canvas->LineTo(217,125);->Canvas->MoveTo(203,128);//конденсатор->Canvas->LineTo(217,128);->Canvas->MoveTo(210,128);->Canvas->LineTo(210,145);->Canvas->MoveTo(210,145);->Canvas->LineTo(170,145);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(167,143,173,149);->Canvas->MoveTo(170,111);->Canvas->LineTo(170,116);->Canvas->Arc(162,116,178,124,170,124,170,116);//
дуга->Canvas->Arc(162,124,178,132,170,132,170,124);//дуга->Canvas->Arc(162,132,178,140,170,140,170,132);//дуга->Canvas->MoveTo(170,140);->Canvas->LineTo(170,145);->Canvas->MoveTo(147,108);->Canvas->LineTo(140,108);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(137,105,143,111);->Canvas->MoveTo(140,108);->Canvas->LineTo(140,125);->Canvas->MoveTo(137,108);->Canvas->LineTo(120,108);->Canvas->MoveTo(120,108);->Canvas->LineTo(120,155);->Canvas->Brush->Color=clWhite;->Canvas->Rectangle(125,155,115,180);->Canvas->MoveTo(120,180);->Canvas->LineTo(120,190);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(117,187,123,193);->Canvas->MoveTo(120,190);->Canvas->LineTo(108,190);->Canvas->MoveTo(105,183);//конденсатор->Canvas->LineTo(105,197);->Canvas->MoveTo(108,183);//
конденсатор->Canvas->LineTo(108,197);->Canvas->MoveTo(105,190);->Canvas->LineTo(94,190);->Canvas->MoveTo(94,190);->Canvas->LineTo(94,207);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(91,204,97,210);->Canvas->MoveTo(94,210);->Canvas->LineTo(94,231);->Canvas->MoveTo(94,231);->Canvas->LineTo(83,231);->Canvas->Arc(72,213,88,221,80,221,80,213);//
дуга->Canvas->Arc(72,221,88,229,80,229,80,221);//
дуга->Canvas->Arc(72,229,88,237,80,237,80,229);//
дуга->Canvas->MoveTo(80,213);->Canvas->LineTo(80,206);->Canvas->MoveTo(80,237);->Canvas->LineTo(80,242);->Canvas->MoveTo(80,206);->Canvas->LineTo(60,206);->Canvas->MoveTo(60,206);->Canvas->LineTo(60,221);->Canvas->MoveTo(53,221);//конденсатор->Canvas->LineTo(67,221);->Canvas->MoveTo(53,224);//конденсатор->Canvas->LineTo(67,224);->Canvas->MoveTo(60,224);->Canvas->LineTo(60,242);->Canvas->MoveTo(60,242);->Canvas->LineTo(81,242);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(78,239,84,245);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(66,203,72,209);->Canvas->MoveTo(69,206);->Canvas->LineTo(69,194);->Canvas->MoveTo(62,192);//конденсатор->Canvas->LineTo(76,192);->Canvas->MoveTo(62,195);//конденсатор->Canvas->LineTo(76,195);->Canvas->MoveTo(69,192);->Canvas->LineTo(69,170);->Canvas->MoveTo(69,180);->Canvas->LineTo(74,170);->Canvas->MoveTo(69,180);->Canvas->LineTo(64,170);->Canvas->MoveTo(81,239);->Canvas->LineTo(81,250);->Canvas->MoveTo(76,250);->Canvas->LineTo(87,250);->Canvas->MoveTo(94,207);->Canvas->LineTo(105,207);->Canvas->MoveTo(105,200);//конденсатор->Canvas->LineTo(105,214);->Canvas->MoveTo(108,200);//
конденсатор->Canvas->LineTo(108,214);->Canvas->MoveTo(108,207);->Canvas->LineTo(120,207);->Canvas->MoveTo(120,207);->Canvas->LineTo(120,187);->Canvas->MoveTo(123,190);->Canvas->LineTo(128,190);->Canvas->Pen->Width=2;
//линия
в
толщину
2 пикселя->Canvas->MoveTo(128,180);->Canvas->LineTo(128,200);->Canvas->Pen->Width=1;->Canvas->MoveTo(128,188);->Canvas->LineTo(140,180);->Canvas->MoveTo(128,192);->Canvas->LineTo(140,200);p2[3];[0].x=140;p2[0].y=200;[1].x=140;p2[1].y=197;[2].x=137;p2[2].y=200;->Canvas->Brush->Color=clBlack;->Canvas->Polygon(p2,2);->Canvas->MoveTo(140,180);->Canvas->LineTo(140,168);->Canvas->MoveTo(140,207);->Canvas->LineTo(170,207);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(167,204,173,210);->Canvas->MoveTo(133,125);//конденсатор->Canvas->LineTo(147,125);->Canvas->MoveTo(133,128);//конденсатор->Canvas->LineTo(147,128);->Canvas->MoveTo(140,128);->Canvas->LineTo(140,146);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(137,143,143,149);->Canvas->MoveTo(143,146);->Canvas->LineTo(170,146);->Canvas->MoveTo(140,149);->Canvas->LineTo(140,170);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(137,162,143,168);->Canvas->MoveTo(140,165);->Canvas->LineTo(170,165);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(167,162,173,168);->Canvas->MoveTo(173,165);->Canvas->LineTo(191,165);->Canvas->MoveTo(191,158);//конденсатор->Canvas->LineTo(191,172);->Canvas->MoveTo(194,158);//конденсатор->Canvas->LineTo(194,172);->Canvas->MoveTo(194,165);->Canvas->LineTo(212,165);->Canvas->MoveTo(212,165);->Canvas->LineTo(212,175);->Canvas->Arc(204,175,220,183,212,183,212,175);//
дуга->Canvas->Arc(204,183,220,191,212,191,212,183);//
дуга->Canvas->Arc(204,191,220,199,212,199,212,191);//
дуга->Canvas->MoveTo(212,199);->Canvas->LineTo(212,207);->Canvas->MoveTo(212,207);->Canvas->LineTo(170,207);->Canvas->MoveTo(170,168);->Canvas->LineTo(170,183);->Canvas->Brush->Color=clBlack;->Canvas->Ellipse(138,204,144,210);->Canvas->MoveTo(141,207);->Canvas->LineTo(141,213);->Canvas->Brush->Color=clWhite;->Canvas->Rectangle(146,213,136,238);//отображает
прямоугольник->Canvas->MoveTo(141,238);->Canvas->LineTo(141,243);->Canvas->MoveTo(141,242);->Canvas->LineTo(80,242);->Canvas->MoveTo(140,207);->Canvas->LineTo(140,200);->Canvas->MoveTo(163,183);//конденсатор->Canvas->LineTo(177,183);->Canvas->MoveTo(163,186);//конденсатор->Canvas->LineTo(177,186);->Canvas->MoveTo(170,186);->Canvas->LineTo(170,210);->Canvas->TextOut(135,25,"+4,5B");->Canvas->TextOut(120,60,"2.7K");->Canvas->TextOut(174,95,"35мГц");->Canvas->TextOut(225,85,"1.8K");->Canvas->TextOut(255,85,"10мк");->Canvas->TextOut(300,98,"к
УЗЧ");->Canvas->TextOut(225,120,"6,8н");->Canvas->TextOut(240,165,"ВРЛ-100");->Canvas->TextOut(205,210,"70мГц");->Canvas->TextOut(159,210,"КТ315");->Canvas->TextOut(148,223,"100");->Canvas->TextOut(100,215,"6.8н");->Canvas->TextOut(30,199,"5..20");->Canvas->TextOut(50,180,"10");->Canvas->TextOut(50,155,"70мГц");->Canvas->TextOut(75,175,"10мк");->Canvas->TextOut(84,160,"100К*");
}
{();
}
//---------------------------------------------------------------------------
Результат данной работы
Список литературы
1. Швайко И.Г., Буката Л.Н., Шаповаленко
В.А. Технологии программирования. Модуль №1. Часть 2. Графика в C++
Builder. Методические
указания к лабораторным работам и выполнению комплексного задания./ Одесса 2012
2. О.Г. Трофименко. Основи
программування. Теорія та практика./Одесса Фенікс 2010