Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Топ:
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2021-01-29 | 48 |
5.00
из
|
Заказать работу |
|
|
Чтобы добавить описание, нужно добавить следующий атрибут перед объявлением класса компоненты:
[Description («Двжущийся человек»)]
public partial class ManControl: UserControl // класс компоненты
Он будет виден в сплывающей подсказке, при наведении курсора на компонент в Панели компонентов.
Добавление компоненты на палитру
Чтобы наша компонента была доступна в любых оконных разрабатываемых приложениях, нужно добавить ее на Палитру компонентов. Для этого нужно выполнить следующие действия:
1. Выбрать команду Choose Items (Выбрать элементы) в контекстном меню панели Toolbox (Инструменты) в нужной группе компонент.
2. Появится диалоговое окно, предлагающие выбрать компоненты (*.dll), которые будут отображаться в этой группе компонент. Если мы не находим нужную нам в предложенном списке, мы можем подгрузить её самостоятельно, нажав кнопку Browse и выбрать путь к файлу <Название компоненты>.dll
3. После этого компоненты появится в списке. Выбираем ее и закрываем диалоговое окно. Компонент <Название компоненты> появится в палитре компонентов. Так же, как и картинка, и описание.
Текст программы Rotary.cs
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Drawing;
namespace ManComponent
{
enum RotateDir
{
ClockWise, // по часовой стрелки
CounterClockWise // против часовой стрелки
}
// класс описывающий вращающюся часть тела, относительно его центра
class Rotary
{
// ПОЛЯ
PointF pos; // начальная точка (центр вращения)
double angle; // угол
float length; // длина
double minAngle; // начальный угол
double maxAngle; // конечный угол – углы задают пределы вращения
public RotateDir dir; // положительное направление вращения
Rotary child; // другая вращ. часть тела, нач, точка которой совпадает с конечной
|
// стачичная переменая класса – «общая» для всех
static double da = Math.PI / 20d; // угловая скорость вращения
// СВОЙСТВА
public double MaxAngle {get {return maxAngle;} set {maxAngle = value;}}
public double MinAngle {get {return minAngle;} set {minAngle = value;}}
public double Angle
{
get {return angle;}
set
{ // преобразуем новый угол, если он отрицательный или больше чем 360 градусов
double a = value;
if (value >= 2 * Math.PI)
a = value – Math.PI * 2;
else if (value < 0)
a = 2 * Math.PI + value;
// если новый угол попадает в заданый диапозон (между min и max)
if (IsAbleToRotate(a))
{
angle = a;
UpdateChild();
return;
}
// если угол находится радом с границей заданного диапазона
else if (Math. Abs (maxAngle – value) < da)
angle = maxAngle;
else if (Math. Abs (minAngle – value) < da)
angle = minAngle;
UpdateChild();
}
}
public PointF Pos {get {return pos;}}
public PointF EndPoint {get {return new PointF (X + (float) Math. Cos(angle) * length, Y + (float) Math. Sin(angle) * length);}}
public float X {get {return pos.X;} set {pos.X = value;}}
public float Y {get {return pos.Y;} set {pos.Y = value;}}
// стачиное свойства да переменой da
public static double dAngle {get {return da;} set {if (value >= 0 && value < Math.PI * 2) da = value;}}
void Initialize (float x, float y, float len, int ang, RotateDir direction)
{
pos = new PointF((float) x, (float) y);
dir = direction;
angle = (double) ang/180d*Math.PI; length = len;
child = null;
minAngle = 0; maxAngle = 2 * Math.PI;
}
public Rotary (float x, float y, float len, int ang, RotateDir direction, Rotary ch)
{
Initialize (x, y, len, ang, direction);
child = ch;
child.dir = dir;
UpdateChild();
}
public Rotary (float x, float y, float len, int ang, RotateDir direction)
{
Initialize (x, y, len, ang, direction);
}
public Rotary (float len, int ang)
{
Initialize (0, 0, len, ang, RotateDir. ClockWise);
}
void UpdateChild()
{
if (child!= null)
{
child.X = X + (float) Math. Cos(angle) * length;
child.Y = Y + (float) Math. Sin(angle) * length;
}
}
public void Draw (Graphics g, Color color)
{
g. DrawLine (new Pen (color, 5), pos, EndPoint);
if (child!= null)
child. Draw (g, color);
g. FillEllipse (new SolidBrush(color), EndPoint.X-5f, EndPoint.Y -5f, 10,10);
}
bool IsAbleToRotate (double a)
{
double lb = minAngle; // нижняя граница
double ub = maxAngle; //
if (dir ==RotateDir. CounterClockWise)
{
ub = minAngle;
lb = maxAngle;
}
if (ub > lb)
if (a >= lb && a <= ub) return true;
else return false;
else if ((a >= lb && a < Math.PI * 2) || (a >= 0 && a < ub))
return true;
else return false;
}
public void SetRange (int min, int max)
{
minAngle = (double) min/180d*Math.PI;
maxAngle = (double) max/180d*Math.PI;
}
public void RotateUp() // вращать по направлению
{
if (dir == RotateDir. CounterClockWise)
Angle -= da;
else Angle += da;
}
public void RotateDown() // вращать против направления
{
if (dir == RotateDir. CounterClockWise)
Angle += da;
|
else Angle -= da;
}
}
Man.cs
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Drawing;
namespace ManComponent
{
class Head
{
const int r = 25;
int x, y;
public Head (int X, int Y)
{
x = X; y = Y;
}
public void Draw (Graphics g, Color color) {g. FillEllipse (new SolidBrush(color), x-r/2, y-r/2, r, r);}
}
class Man
{
int x, y, len;
public Color color;
public Rotary lArm, lElbow, rArm, rElbow, lLeg, lKnee, rLeg, rKnee;
public Head head;
public Man (int X, int Y, int length)
{ // положение человечка центр головы, длина туловища
x = X; y = Y; len = length;
color = Color. Blue;
lElbow = new Rotary (30,90); // левый локоть(предплечее)
lElbow. SetRange (90,270);
lArm = new Rotary (x, y+length*0.2f, 30, 135, RotateDir. ClockWise, lElbow); // левая рука
lArm. SetRange (135,225);
lKnee = new Rotary (35, 90);
lKnee. SetRange (90, 180);
lLeg = new Rotary (x, y + len, 35, 135, RotateDir. ClockWise, lKnee);
lLeg. SetRange (125, 180);
rElbow = new Rotary (30, 90); // правый локоть
rElbow. SetRange (90,270);
rArm = new Rotary (x, y + length * 0.2f, 30, 45, RotateDir. CounterClockWise, rElbow); // правая рука
rArm. SetRange (45, 315);
rKnee = new Rotary (35, 90);
rKnee. SetRange (90, 0);
rLeg = new Rotary (x, y + len, 35,45, RotateDir. CounterClockWise, rKnee);
rLeg. SetRange (45, 0);
head = new Head (x, y);
}
public void Draw (Graphics g)
{
lArm. Draw (g, color); // левая рука
rArm. Draw (g, color); // правая рука
lLeg. Draw (g, color); // левая нога
rLeg. Draw (g, color); // правая нога
head. Draw (g, color); // голова
g. DrawLine (new Pen (color, 5), x, y, x, y + len);
}
}
ManControl.cs
using System;
using System. Collections. Generic;
using System. ComponentModel;
using System. Drawing;
using System. Data;
using System. Linq;
using System. Text;
using System. Windows. Forms;
namespace ManComponent
{
[ToolboxBitmap (typeof(ManControl), «Man.bmp»)]
[Description («Двжущийся человек»)]
public partial class ManControl: UserControl
Man man;
[Category («Движущийся человек»), Description («Угловая скорость»), Browsable(true)]
public double dAngle {get {return Rotary.dAngle;} set {if (value >= 0 && value < Math.PI * 2) Rotary.dAngle = value;}}
[Category («Движущийся человек»), Description («Цвет человека»), Browsable(true)]
public Color Color {get {return man.color;} set {man.color = value; Refresh();}}
public ManControl()
InitializeComponent();
man = new Man (Width/2,40,80);
Color = Color. Black;
}
private void ManControl_Paint (object sender, PaintEventArgs e)
{
man. Draw (this. CreateGraphics());
}
man.lArm. RotateUp();
man.lElbow. RotateUp();
Refresh();
}
public void GetLeftLegUp()
{
man.lLeg. RotateUp();
man.lKnee. RotateUp();
Refresh();
}
public void GetRigthLegUp()
{
man.rLeg. RotateUp();
man.rKnee. RotateUp();
Refresh();
}
public void GetRightArmUp()
{
man.rArm. RotateUp();
man.rElbow. RotateUp();
Refresh();
}
public void GetLeftArmDown()
{
man.lArm. RotateDown();
man.lElbow. RotateDown();
Refresh();
}
public void GetLeftLegDown()
{
man.lLeg. RotateDown();
man.lKnee. RotateDown();
Refresh();
}
public void GetRigthLegDown()
{
man.rLeg. RotateDown();
man.rKnee. RotateDown();
Refresh();
}
public void GetRightArmDown()
{
man.rArm. RotateDown();
man.rElbow. RotateDown();
Refresh();
}
}
}
Размещено на Allbest.ru
|
|
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!