c# cad 二次开发 类库对话框的示例

c# cad 二次开发 类库对话框的示例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _19对话框示例
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
this.DrawEentity();
}

    //画图形的函数

private void DrawEentity()
{
int width = picBxDrawMap.Width;
int height = picBxDrawMap.Height;
Bitmap bitmap = new Bitmap(width, height);//创建一个位图对象
Graphics graph = Graphics.FromImage(bitmap); //通过位图创建GDI+对象
Rectangle rect = new Rectangle((int)(width * 0.15), (int)(height * 0.15), (int)(width * 0.8), (int)(height * 0.8));

        //绘制图形
        Rectangle rectExtends = this.DrawLineAndArc(bitmap, graph,rect);
        //画注释
        this.DrawDimension(bitmap, graph, rectExtends); 
        //graph.DrawRectangle(new Pen(Brushes.Red), rect);
        picBxDrawMap.Image = bitmap;

    }

private Rectangle DrawLineAndArc(Bitmap bitmap, Graphics graph, Rectangle rect)
{
double ratio = rect.Width * 1.0 / rect.Height;
double width = (double)numUDlength.Value;//矩形宽度
double height = (double)numUDheight.Value;//矩形的高度
Pen pen = new Pen(Brushes.Black);
Point topLineLeftPoint;
Point topLineRightPoint;
Point rightLineTopPoint;
Point rightLineBottomPoint;
Point bottomLineLeftPoint;
Point bottomLineRightPoint;
Point leftLineTopPoint;
Point leftLineBottomPoint;
if (width/height >= ratio)
{
//以长度占满绘图区域,按比例绘制高度,圆弧
// width => rect.Width height = height * rect.Width/wdith
height = height* rect.Width/width;
int divHeight = (int)(rect.Height - height)/2;
topLineLeftPoint = new Point(rect.X, rect.Y + divHeight);
topLineRightPoint = new Point(rect.X+rect.Width, rect.Y + divHeight);
rightLineTopPoint = topLineRightPoint;
rightLineBottomPoint = new Point(rect.X + rect.Width, rect.Y + rect.Height- divHeight);
bottomLineLeftPoint = new Point(rect.X, rect.Y + rect.Height - divHeight);
bottomLineRightPoint = rightLineBottomPoint;
leftLineTopPoint = topLineLeftPoint;
leftLineBottomPoint = bottomLineLeftPoint;
}
else
{
//以高度占满绘图区域,按比例绘制长度,圆弧
width = width * rect.Height / height;
int divWidth = (int)(rect.Width - width) / 2;
topLineLeftPoint = new Point(rect.X + divWidth, rect.Y);
topLineRightPoint = new Point(rect.X + rect.Width - divWidth, rect.Y);
rightLineTopPoint = topLineRightPoint;
rightLineBottomPoint = new Point(rect.X + rect.Width - divWidth, rect.Y + rect.Height);
bottomLineLeftPoint = new Point(rect.X + divWidth, rect.Y + rect.Height);
bottomLineRightPoint = rightLineBottomPoint;
leftLineTopPoint = topLineLeftPoint;
leftLineBottomPoint = bottomLineLeftPoint;

        }
        //绘制上边线
        graph.DrawLine(pen, topLineLeftPoint, topLineRightPoint);
        //绘制下边线
        graph.DrawLine(pen, bottomLineLeftPoint, bottomLineRightPoint);
        //绘制左边线
        graph.DrawLine(pen, leftLineTopPoint, leftLineBottomPoint);
        //绘制右边线
        graph.DrawLine(pen, rightLineTopPoint, rightLineBottomPoint);
        Rectangle rectExtends = new Rectangle(topLineLeftPoint.X,topLineLeftPoint.Y,topLineRightPoint.X-topLineLeftPoint.X,leftLineBottomPoint.Y-leftLineTopPoint.Y);
        return rectExtends;

    }
    /// <summary>
    /// 绘制注释
    /// </summary>
    /// <param name="bitmap"></param>
    /// <param name="graph"></param>
    /// <param name="rect"></param>
    private void DrawDimension(Bitmap bitmap,Graphics graph,Rectangle rect)
    {
        int width = picBxDrawMap.Width;
        int height = picBxDrawMap.Height;
        Pen pen = new Pen(Brushes.LawnGreen);
        string strW = numUDlength.Value.ToString();//水平方向的注释文字
        string strH = numUDheight.Value.ToString();//垂直方向的注释文字
         //半径的注释文字
        #region //水平长度的注释线
        //Point pointHL1 = new Point(rect.X,(int)(height * 0.05));
        //Point pointHL2 = new Point(rect.X,(int)(height * 0.14));
        Point pointHL1 = new Point(rect.X, (int)(height * 0.05));
        Point pointHL2 = new Point(rect.X,rect.Y-4);
        Point pointHR1 = new Point(rect.X+rect.Width, (int)(height * 0.05));
        Point pointHR2 = new Point(rect.X + rect.Width, rect.Y - 4);
        Point PointHH1 = new Point(rect.X, (int)(height * 0.08));
        Point PointHH11 = new Point(rect.X + rect.Width / 2 - 12 * (strW.Length / 2)-6, (int)(height * 0.08));
        Point PointHH2 = new Point(rect.X + rect.Width / 2 + 12 * (strW.Length / 2)+8, (int)(height * 0.08));
        Point PointHH21 = new Point(rect.X + rect.Width, (int)(height * 0.08));
        graph.DrawString(strW, new Font("宋体", 12), Brushes.LawnGreen, rect.X + rect.Width / 2-12*(strW.Length/2), (int)(height * 0.08)-8);
        graph.DrawLine(pen, pointHL1, pointHL2);//水平标注的左侧综线
        graph.DrawLine(pen, pointHR1, pointHR2);//水平标注的左右侧综线
        graph.DrawLine(pen, PointHH1, PointHH11);//第一段水平线
        graph.DrawLine(pen, PointHH2, PointHH21);//第二段水平线
        //左侧箭头
        graph.DrawLine(pen, PointHH1, new Point(PointHH1.X + 12, PointHH1.Y - 3));
        graph.DrawLine(pen, PointHH1, new Point(PointHH1.X + 12, PointHH1.Y + 3));
        //右侧箭头
        graph.DrawLine(pen, PointHH21, new Point(PointHH21.X - 12, PointHH1.Y - 3));
        graph.DrawLine(pen, PointHH21, new Point(PointHH21.X - 12, PointHH1.Y + 3));

        
        #endregion
        
        #region  //垂直高度的注释
        Point pointVT1 = new Point((int)(width * 0.05), rect.Y);
        Point pointVT2 = new Point(rect.X-4, rect.Y);
        graph.DrawLine(pen,pointVT1, pointVT2); //垂直注释上面横线
        Point pointVB1 = new Point((int)(width * 0.05), rect.Y + rect.Height);
        Point pointVB2 = new Point(rect.X - 4, rect.Y + rect.Height);
        graph.DrawLine(pen, pointVB1, pointVB2); //垂直注释下面横线
        graph.DrawString(strH, new Font("宋体", 12), Brushes.LawnGreen,(int)(width * 0.08)-strH.Length*10/2, rect.Y+ rect.Height / 2 - 8);//垂直方向的注释文字
        Point pointVV1 = new Point((int)(width * 0.08), rect.Y);
        Point pointVV11 = new Point((int)(width * 0.08), rect.Y+rect.Height/2-8);
        Point pointVV2 = new Point((int)(width * 0.08), rect.Y + rect.Height / 2 + 8);
        Point pointVV21 = new Point((int)(width * 0.08), rect.Y + rect.Height);
        graph.DrawLine(pen, pointVV1, pointVV11); //垂直注释第一段线
        graph.DrawLine(pen, pointVV2, pointVV21); //垂直注释第二段线
        //上面箭头
        graph.DrawLine(pen, pointVV1, new Point(pointVV1.X - 3, pointVV1.Y + 12));
        graph.DrawLine(pen, pointVV1, new Point(pointVV1.X + 3, pointVV1.Y + 12));
        //下面箭头
        graph.DrawLine(pen, pointVV21, new Point(pointVV21.X - 3, pointVV21.Y - 12));
        graph.DrawLine(pen, pointVV21, new Point(pointVV21.X + 3, pointVV21.Y - 12));
        #endregion

        //半径注释

        //绘制中心线
        #region
        double lengthDiv = (rect.Height + 10) / 39;
        Point firstPoint = new Point(rect.X + rect.Width / 2, rect.Y - 5);
        Point endPoint = new Point((int)(rect.X + rect.Width / 2), (int)(firstPoint.Y + 2 * lengthDiv));
        for (int i = 0; i < 20; i++)
        {
            graph.DrawLine(new Pen(Brushes.PaleVioletRed), firstPoint, endPoint);
            firstPoint.Y = endPoint.Y + (int)lengthDiv;
            endPoint = new Point((int)(rect.X + rect.Width / 2), (int)(firstPoint.Y + 2 * lengthDiv));
        }

        lengthDiv = (rect.Width + 10) / 39;
        firstPoint = new Point((int)(rect.X-5),(int)(rect.Y + rect.Height/2));
        endPoint = new Point((int)(firstPoint.X + lengthDiv), (int)(rect.Y + rect.Height / 2));
         for (int i = 0; i < 22; i++)
        {
            graph.DrawLine(new Pen(Brushes.PaleVioletRed), firstPoint, endPoint);
            firstPoint.X = endPoint.X + (int)lengthDiv;
            endPoint = new Point((int)(firstPoint.X + lengthDiv), (int)(rect.Y + rect.Height / 2));
        }
        #endregion



    }

    private void numUDlength_ValueChanged(object sender, EventArgs e)
    {
        this.DrawEentity();
    }

    private void numUDheight_ValueChanged(object sender, EventArgs e)
    {
        this.DrawEentity();
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DK业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值