После использования Line и Polyline, независимо от того, что я выбираю (круг и т. д.), он всегда ссылается на последнюю C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 После использования Line и Polyline, независимо от того, что я выбираю (круг и т. д.), он всегда ссылается на последнюю

Сообщение Anonymous »

Я создаю 2D-приложение CAD на C# для изучения кодирования. Но я остановился на простых вещах. Я много пробовал, но так и не понял. Я просто хотел, чтобы после использования линии или полилинии моя текущая позиция была сброшена, но это не так.
Если это возможно, я могу отправить сюда весь проект.
Вот мой код:< /p>

Код: Выделить всё

        private void drawing_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
if (active_zoom)
{
switch (zoomClick)
{
case 1:
firstCorner = e.Location;
zoomClick++;
break;
case 2:
SetZoomWin(firstCorner,e.Location);
ActiveCursor(cursorIndex, cursorSize);
active_zoom = false;
zoomClick = 1;
break;
}
}
if(active_drawing &&  !active_zoom)
{
switch (DrawIndex)
{
case 0: //nokta
entities.Add(new Entities.Point(currentPosition));
break;
case 1: //çizgi
switch (ClickNum)
{
case 1:
firstPoint = currentPosition;
ClickNum++;
break;
case 2:
entities.Add(new Line(firstPoint, currentPosition));
firstPoint = currentPosition;
break;
}
break;
case 2: // Çoklu çizgi Polyline
firstPoint = currentPosition;
tempPolyline.Vertexes.Add(new LwPolylineVertex(firstPoint.ToVector2));
ClickNum = 2;
break;
case 3://dikdörtgen
switch (ClickNum)
{
case 1:
firstPoint = currentPosition;
ClickNum++;
break;
case 2:
entities.Add(Method.PointToRect(firstPoint, currentPosition, out direction));
CancelAll();
break;
}
break;
case 41: //Yay (3 nokta)
case 42: //Yay (ilk, merkez, son)
case 43: //Yay (merkez,ikinci,son)
switch (ClickNum)
{
case 1:
firstPoint = currentPosition;
ClickNum++;
break;
case 2:
secondPoint = currentPosition;
ClickNum++;
break;
case 3:
Arc a = new Arc();
switch (DrawIndex)
{
case 41: // 3 nokta
a = Method.GetArcWith3Points(firstPoint, secondPoint, currentPosition);
break;
case 42: //ilk, merkez, son
a = Method.GetArcWithCenterStartEnd(secondPoint, firstPoint, currentPosition);
break;
case 43: //merkez,ikinci,son
a = Method.GetArcWithCenterStartEnd(firstPoint, secondPoint, currentPosition);
break;
}
entities.Add(a);
CancelAll();
break;
}
break;
case 44: // yay (merkez, ikinci, açı)
case 45: // yay (merkez, ikinci, uzunluk)
case 46: // yay (ilk, ikinci, açı)
case 47: // yay (ilk, merkez, uzunluk)
case 48: // yay (ilk, ikinci, radius)
case 49:  // yay (ilk, merkez, açı)
switch (ClickNum)
{
case 1:
firstPoint = currentPosition;
entities.Add(new Entities.Point(firstPoint));
ClickNum++;
break;
case 2:
secondPoint = currentPosition;
entities.Add(new Entities.Point(secondPoint));
using (var getValue = new EntryForms.GetDoubleValue())
{
switch (DrawIndex)
{
case 44:
case 46:
case 49:
getValue.Title = "Açı";
break;
case 45:
case 47:
getValue.Title = "Uzunluk";
break;
case 48:
getValue.Title = "Radius";
break;
}
var result = getValue.ShowDialog();
if (result == DialogResult.OK)
{
switch (DrawIndex)
{
case 44: // merkez, ikinci, açı
entities.Add(Method.GetArcWithCenterStartAngle(firstPoint, currentPosition, getValue.ResultValue));
break;
case 45: //merkez, ikinci, uzunluk
entities.Add(Method.GetArcWithCenterStartLength(firstPoint, currentPosition, getValue.ResultValue));
break;
case 46: //ilk, ikinci, açı
entities.Add(Method.GetArcWithStartEndAngle(firstPoint, currentPosition, getValue.ResultValue));
break;
case 47: //ilk, Merkez, uzunluk
entities.Add(Method.GetArcWithCenterStartLength(currentPosition, firstPoint, getValue.ResultValue));
break;
case 48:
//entity.Add(Method.GetArcWithStartEndRadius);
break;
case 49:
entities.Add(Method.GetArcWithCenterStartAngle(currentPosition, firstPoint, getValue.ResultValue));
break;
}
}
CancelAll();
}
break;
}
break;
case 51://çember(Merkez - radius)
case 52://çember(Merkez - Çap)
case 53: //3 noktalı çember
case 54:  //2 noktalı çember
switch (ClickNum)
{
case 1:
firstPoint = currentPosition;
ClickNum++;
break;
case 2:
switch (DrawIndex)
{
case 51:
double r = firstPoint.DistanceFrom(currentPosition);
entities.Add(new Entities.Circle(firstPoint, r));
CancelAll();
break;
case 52:
r = firstPoint.DistanceFrom(currentPosition) / 2;
entities.Add(new Entities.Circle(firstPoint, r));
CancelAll();
break;
case 53:
secondPoint = currentPosition;
ClickNum++;
break;
case 54:
entities.Add(Method.GetCircleWithTwoPoints(firstPoint, currentPosition));
CancelAll();
break;
}
break;
case 3:
entities.Add(Method.GetCircleWith3Point(firstPoint, secondPoint, currentPosition));
CancelAll();
break;
}
break;
case 61: //elips
case 62: //eliptik yay
switch (ClickNum)
{
case 1:
firstPoint = currentPosition;
ClickNum++;
break;
case 2:
secondPoint = currentPosition;
ClickNum++;
break;
case 3:
switch (DrawIndex)
{
case 61:
Ellipse ellipse = Method.GetEllipse(firstPoint, secondPoint, currentPosition);
entities.Add(ellipse);
CancelAll();
break;
case 62:
thirdPoint = currentPosition;
tempEllipse.Add(Method.GetEllipse(firstPoint, secondPoint, thirdPoint));
ClickNum++;
break;
}
break;
case 4:
fourthPoint = currentPosition;
ClickNum++;
break;
case 5:
entities.Add(Method.GetEllipticalArc(firstPoint, secondPoint, thirdPoint, fourthPoint, currentPosition));
CancelAll();
break;
}
break;
case 7:  //çokgen
switch (ClickNum)
{
case 1:
firstPoint = currentPosition;
ClickNum++;
using (var setpolygon = new EntryForms.SetPolygonValuesForm())
{
var result = setpolygon.ShowDialog();
if (result == DialogResult.OK)
{
sidesQty = setpolygon.SidesQty;
inscribed = setpolygon.Inscribed;
}
else
CancelAll();
}
break;
case 2:
entities.Add(Method.GetPolygon(firstPoint, currentPosition, sidesQty, inscribed));
CancelAll();
break;
}
break;
}
}

if (active_modify)
{
if(active_selection)
segmentIndex = Method.GetSegmentIndex(entities, currentPosition, CursorRect(currentPosition), out Vector3 clickPoint);
if (!active_selection)
{
switch (ClickNum)
{
case 1:
firstPoint = currentPosition;
ClickNum++;
break;
case 2:
switch (Modify1Index)
{
case 0: // Copy object
Method.Modify1Selection(Modify1Index, entities, firstPoint, currentPosition);
break;
case 1: // Move object
Method.Modify1Selection(Modify1Index, entities, firstPoint, currentPosition);
CancelAll();
break;
}
break;
}
}
}
drawing.Refresh();
}
}
#endregion

#region Paint
Line extline = new Line();
private void drawing_Paint(object sender, PaintEventArgs e)
{
e.Graphics.SetParameters(XScroll, YScroll, ScaleFactor, Pixel_to_Mn(drawing.Height));
Pen pen = new Pen(Color.Black,0.1f);
Pen extpen = new Pen(Color.Purple, 0.1f);
extpen.DashPattern = new float[] { 1.0f / ScaleFactor, 2.0f / ScaleFactor };

#region Drawing
//Bütün entityleri oluştur
if(entities.Count > 0)
{
foreach(EntityObject entities in entities)
{
e.Graphics.DrawEntity(pen, entities);
}
}

//Draw tempPolyline
if (tempPolyline.Vertexes.Count > 1)
{
e.Graphics.DrawLwPolyline(pen, tempPolyline);
}
#endregion

#region Extended

//Çizgiyi devam ettirilebilir kıl
extline = new Entities.Line(firstPoint, currentPosition);
// Temp ellipse
if (tempEllipse.Count >  0)
{
foreach(Ellipse elp in tempEllipse)
e.Graphics.DrawEllipse(extpen, elp);
}

switch (DrawIndex)
{
case 1://çizgi
case 2://çoklu çizgi
if (ClickNum == 2)
{
e.Graphics.DrawLine(extpen, extline);
}

break;
case 3://dikdörtgen
if(ClickNum == 2)
{
LwPolyline lw = Method.PointToRect(firstPoint, currentPosition, out direction);
e.Graphics.DrawLwPolyline(extpen, lw);
}
break;
case 41:// 3 nokta yay
case 42:// ilk merkez son - yay
case 43:// merkez ilk son - yay
switch (ClickNum)
{
case 2:
e.Graphics.DrawLine(extpen, extline);
break;
case 3:
Arc a = new Arc();
switch (DrawIndex)
{
case 41:
a = Method.GetArcWith3Points(firstPoint, secondPoint, currentPosition);
break;
case 42:
extline = new Line(secondPoint, currentPosition);
e.Graphics.DrawLine(extpen, extline);
a = Method.GetArcWithCenterStartEnd(secondPoint, firstPoint, currentPosition);
break;
case 43:
e.Graphics.DrawLine(extpen, extline);
a = Method.GetArcWithCenterStartEnd(firstPoint, secondPoint, currentPosition);
break;
}
e.Graphics.DrawArc(extpen, a);
break;
}
break;
case 44: //yay (merkez ikinci ve açı)
case 45: //yay (merkez ikinci ve uzunluk)
case 46: //yay (birinci, ikinci ve açı)
case 47: //yay (birinci, merkez ve uzunluk)
case 48: //yay (birinci, ikinci ve radius)
case 49: //yay (birinci, merkez ve açı)
switch (ClickNum)
{
case 2:
e.Graphics.DrawLine(extpen, extline);
break;
}
break;
case 51: // Çember (merkez, radius)
case 52: // Çember (çember, uzunluk)
switch (ClickNum)
{
case 2:
e.Graphics.DrawLine(extpen, extline);
double r = firstPoint.DistanceFrom(currentPosition);
Circle circle = new Entities.Circle(firstPoint, r);
if (DrawIndex == 52)
circle = new Circle(firstPoint, r / 2);
e.Graphics.DrawCircle(extpen, circle);
break;
}
break;
case 53: // Çember (3 nokta)
switch (ClickNum)
{
case 2:
e.Graphics.DrawLine(extpen, extline);
break;
case 3:
Entities.Circle c = Methods.Method.GetCircleWith3Point(firstPoint, secondPoint, currentPosition);
e.Graphics.DrawCircle(extpen, c);
break;
}
break;
case 54: //Çember (2 nokta)
switch (ClickNum)
{
case 2:
Circle c = Method.GetCircleWithTwoPoints(firstPoint, currentPosition);
e.Graphics.DrawCircle(extpen, c);
break;
}
break;
case 61:  // Tam Elips
case 62: //eliptik yay
extline = new Entities.Line(firstPoint, currentPosition);
switch (ClickNum)
{
case 2:
case 4:
e.Graphics.DrawLine(extpen, extline);
break;
case 3:
e.Graphics.DrawLine(extpen, extline);
Ellipse ellipse = Method.GetEllipse(firstPoint, secondPoint, currentPosition);
e.Graphics.DrawEllipse(extpen, ellipse);
break;
case 5:
e.Graphics.DrawLine(extpen, extline);
Ellipse elp = Method.GetEllipticalArc(firstPoint,secondPoint,thirdPoint,fourthPoint,currentPosition);
e.Graphics.DrawEllipticalArc(pen, elp);
break;
}
break;
case 7://Çokgen
if(ClickNum == 2)
{
e.Graphics.DrawLine(extpen, extline);
LwPolyline lw = Method.GetPolygon(firstPoint, currentPosition, sidesQty, inscribed);
e.Graphics.DrawLwPolyline(extpen, lw);
}
break;
}
#endregion

#region Extended of modify
if (active_modify)
{
switch (ClickNum)
{
case 2:
e.Graphics.ExtendedOfModify(extpen, entities, firstPoint, currentPosition);
break;
}

}
#endregion

#region draw zoom rect
if (active_zoom &&  !active_pan)
{
switch (zoomClick)
{
case 2:
LwPolyline rect = Method.PointToRect(PointToCartesian(firstCorner), currentPosition, out direction);
e.Graphics.DrawLwPolyline(new Pen(Color.Red, 0), rect);
break;
}
}
#endregion
}
#endregion

#region Mouse move
private void drawing_MouseMove(object sender, MouseEventArgs e)
{
currentPosition = PointToCartesian(e.Location);
coordinate.Text = string.Format("{0,0:F3}, {1,0:F3}, {2,0:F3}", currentPosition.X,currentPosition.Y,currentPosition.Z);

if (active_pan)
{
float dx = (float)(currentPosition.X - panPoint.X);
float dy = (float)(currentPosition.Y - panPoint.Y);

XScroll -=dx*ScaleFactor;
YScroll +=dy*ScaleFactor;

SetScrollBarValues();
}

x1 = e.Location.X;
x2 = drawing.ClientSize.Width - x1;
y1 = e.Location.Y;
y2 = drawing.ClientSize.Height - y1;
drawing.Refresh();
}

#endregion

#region "Custom Function"

#region Convert system point to world point
private Vector3 PointToCartesian(System.Drawing.Point point)
{
return new Vector3((Pixel_to_Mn(point.X) + XScroll) / ScaleFactor, (Pixel_to_Mn(drawing.Height - point.Y) - YScroll) / ScaleFactor);
}
#endregion

#region Convert pixels to millimeters
private float Pixel_to_Mn(float pixel)
{
return pixel * 25.4f / DPI;
}
#endregion

#region Convert millimeters to pixels
private float Mn_to_Pixel(float pixel)
{
return pixel / 25.4f * DPI;
}
#endregion

#region Cancel all command
private void CancelAll(int index = 1)
{
DrawIndex = -1;
active_drawing = false;
active_selection = true;
ActiveCursor(0, 0);
ClickNum = 1;
firstPoint = new Vector3();
LwPolyLineCloseStatus(index);
tempEllipse.Clear();
DeSelectAll();
}

#endregion

#region DeSelect All
private void DeSelectAll()
{
foreach(EntityObject entity in entities)
entity.DeSelect();
drawing.Refresh();
}

#endregion

#endregion

#region "Graphics form components event"

#region Cancel button
private void cancelBtn_Click(object sender, EventArgs e)
{
CancelAll();
}
#endregion

#region Draw buttons
private void DrawBtn_Click(object sender,EventArgs e)
{
var item = sender as RibbonButton;
DrawIndex = drawPanel.Items.IndexOf(item);
active_drawing = true;
ActiveCursor(1, draw_cursorSize);
}
#endregion

#region Circle button
private void CircleBtn_Click(object sender, EventArgs e)
{
var item = sender as RibbonButton;
DrawIndex = circleBtn.DropDownItems.IndexOf(item) + 51;
active_drawing = true;
ActiveCursor(1, draw_cursorSize);
}
#endregion

#region Arc button
private void ArcBtn_Click(object sender, EventArgs e)
{
var item = sender as RibbonButton;
DrawIndex = arcBtn.DropDownItems.IndexOf(item) + 41;
active_drawing = true;
ActiveCursor(1, draw_cursorSize);
}
#endregion

#region Ellipse button
private void EllipseBtn_Click(object sender, EventArgs e)
{
var item = sender as RibbonButton;
DrawIndex = ellipseBtn.DropDownItems.IndexOf(item) + 61;
active_drawing = true;
ActiveCursor(1, draw_cursorSize);
}
#endregion

#region Modify button event
private void ModifyBtn_Click(object sender,  EventArgs e)
{
var item = sender as RibbonButton;
Modify1Index = editPanel.Items.IndexOf(item);
active_modify = true;
ActiveCursor(2, edit_cursorSize);
SetModifyPopup();
}
#endregion

#endregion

private void EnterBtn_Click(object sender, EventArgs e)
{
active_selection = false;
ActiveCursor(1, draw_cursorSize);
}
#endregion

#endregion

private void closeBoundary_Click(object sender, EventArgs e)
{
switch (DrawIndex)
{
case 1:// çizgi
break;
case 2:// LwPolyline
CancelAll(2);
break;
}
}

private void LwPolyLineCloseStatus(int index)
{
List vertexes = new List();
foreach (LwPolylineVertex lw in tempPolyline.Vertexes)
vertexes.Add(lw);
if (vertexes.Count > 0)
{
switch(index)
{
case 1:
entities.Add(new LwPolyline(vertexes, false));
break;
case 2:
if (vertexes.Count > 2)
entities.Add(new LwPolyline(vertexes, true));
else
entities.Add(new LwPolyline(vertexes, false));
break;
}
}
tempPolyline.Vertexes.Clear();
}
}
}

Я думаю, у меня проблемы с cancelAll или currentPosition...

Подробнее здесь: https://stackoverflow.com/questions/790 ... -always-re
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • После использования Line и Polyline, независимо от того, что я выбираю (круг и т. д.), он всегда ссылается на последнюю
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • PHPWORD Domdocument :: Loadxml (): Открытие и окончание тегов несоответствие: BR Line 1 и P In Entity, Line: 1
    Anonymous » » в форуме Php
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Височный лист PolyLine
    Гость » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Гость
  • Является ли упрощение CGAL Polyline недетерминированным?
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как работать с контекстным меню Leaflet Polyline
    Anonymous » » в форуме Javascript
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»