我没有看到关于这个问题的几个问题,我尝试了所有解决方案,但没有一个适合我的情况。 我的代码正在运行;这个image显示了当我点击绘图按钮时会发生什么。 我需要放大那个绘图。是否可以编写像autocad feature" zoom / extent"?
的代码Pen myPen = new Pen(Color.Black);
int centerpointx, centerpointy;
private void pictureBoxDraw_Paint(object sender, PaintEventArgs e)
{
centerpointx = pictureBoxDraw.Size.Width/2;
centerpointy = pictureBoxDraw.Size.Height/2;
myPen.Width = 2;
if (binary > 0)
{
var sizecrestgeo = 40;
var distancearraycrestgeo = new float[sizecrestgeo];
var elevationarraycrestgeo = new float[sizecrestgeo];
for (int i = 0; i < sizecrestgeo; i++)
{
distancearraycrestgeo[i] = float.Parse(dataGridViewCrestGeo.Rows[i].Cells[0].Value.ToString());
elevationarraycrestgeo[i] = float.Parse(dataGridViewCrestGeo.Rows[i].Cells[1].Value.ToString())*-1;
}
for (int i=0; i < sizecrestgeo-1; i++)
{
e.Graphics.DrawLine(myPen, distancearraycrestgeo[i]+centerpointx, elevationarraycrestgeo[i]+centerpointy, distancearraycrestgeo[i + 1]+centerpointx, elevationarraycrestgeo[i + 1]+centerpointy);
}
}
else
{
}
}
private void buttonDraw_Click_1(object sender, EventArgs e)
{
if (Hd > 0.0001)
{
binary = 1;
pictureBoxDraw.Invalidate();
}
else
{
MessageBox.Show("No data to draw, perform analysis first.");
}
}
private void buttoncleardraw_Click(object sender, EventArgs e)
{
binary = 0;
pictureBoxDraw.Invalidate();
}
}
答案 0 :(得分:0)
Graphics.ScaleTransform()是你可以缩放的方式。尝试在paint事件处理程序中使用类似的东西:
e.Graphics.ScaleTransform(2.0F, 2.0F);
答案 1 :(得分:0)
如果你知道所有的拼图,这并不是那么难。
让我们从明显的一个开始:
Graphics
缩放ScaleTransform
对象以创建缩放图形。正如我所提到的,这将包括笔的宽度,字体大小以及您绘制的任何图像(尽管不是HatchBrush
的阴影)。
您还询问了如何使图纸居中“#”。这是一个非显而易见的概念:绘图表面的中心是什么?
缩放时(就像旋转一样),您始终需要知道缩放(或旋转)的中心点。默认情况下,这是原点(0,0)
。我选择了Panel
的中心。你可能想选择一些其他的观点..
一旦你这样做,你可以使用TranslateTransform
将图形视口的原点移动到这一点。
一旦你完成了这一切,你几乎肯定会想要滚动。
为此,您有两种选择:
您可以在另一个控件中保持AutoScroll = false
和嵌套画布控件,通常是Panel
,其中{{1} }};接下来使画布控件足够大,以便始终保持您的绘图,并且您已完成。
或者您可以为画布控件启用AutoScroll = true
并设置足够大的AutoScroll
。如果您然后将当前滚动位置添加到翻译,您也完成了。让我们看看这个解决方案:
这是AutoScrollMinSize
事件中的代码:
Paint
一些注意事项:
Size sz = panel3.ClientSize;
Point center = new Point(sz.Width / 2, sz.Height / 2);
Graphics g = e.Graphics;
// center point for testing only!
g.DrawEllipse(Pens.Orange, center.X - 3, center.Y - 3, 6, 6);
// you determine the value of the zooming!
float zoom = (trackBar1.Value+1) / 3f;
// move the scrolled center to the origon
g.TranslateTransform(center.X + panel3.AutoScrollPosition.X,
center.Y + panel3.AutoScrollPosition.Y);
// scale the graphics
g.ScaleTransform(zoom, zoom);
// draw some stuff..
using(Pen pen = new Pen(Color.Yellow, 0.1f))
for (int i = -100; i < 100; i+= 10)
g.DrawEllipse(Pens.Yellow, i-22,i-22,44,44);
TrackBar
事件中唯一的一行是触发Scroll
事件:Paint
panel3.Invalidate();
所需的唯一设置是
Panel
但是为了避免闪烁,强烈建议使用 panel3.AutoScroll = true;
panel3.AutoScrollMinSize = new Size(500, 500); // use the size you want to allow!
子类,可能是这样的:
DoubleBuffered