⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxfmtext.cs

📁 导出dxf的原码类库,根据国外一个反编译的
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Drawing;

namespace DXFFile
{
    public class DXFMText : DXFFigure
    {
        // Methods
        public DXFMText()
        {
        }

        public DXFMText(DXFData aData)
            : base(aData)
        {
        }

        public override void ExportAsDXF(DXFExport ADXFExport)
        {
            ADXFExport.AddName("MTEXT", "AcDbMText");
            ADXFExport.AddColor(base.data);
            ADXFExport.Add3DPoint(10, base.data.point);
            ADXFExport.AddFloat(40, ADXFExport.MM(base.data.height));
            if (base.data.rotation != 0f)
            {
                ADXFExport.AddFloat(50, base.data.rotation);
            }
            if (base.data.hAlign != 0)
            {
                ADXFExport.AddInt(0x47, base.data.hAlign + 1);
            }
            ADXFExport.current.Add("  1");
            ADXFExport.current.Add(base.data.text);
        }

        public override bool IntersecRect(Rect aRect)
        {
            Rect rect = new Rect();
            if (base.data.rotation == 0f)
            {
                rect.X1 = (int)Math.Round((double)base.data.point.X);
                rect.Y1 = (int)Math.Round((double)base.data.point.Y);
                rect.X2 = rect.X1 + ((int)Math.Round((double)base.data.rWidth));
                rect.Y2 = rect.Y1 - ((int)Math.Round((double)base.data.height));
            }
            if (base.data.rotation == 90f)
            {
                rect.X1 = (int)Math.Round((double)base.data.point.X);
                rect.Y1 = (int)Math.Round((double)base.data.point.Y);
                rect.X2 = rect.X1 + ((int)Math.Round((double)base.data.height));
                rect.Y2 = rect.Y1 + ((int)Math.Round((double)base.data.rWidth));
            }
            if (base.data.rotation == 270f)
            {
                rect.X1 = (int)Math.Round((double)base.data.point.X);
                rect.Y1 = (int)Math.Round((double)base.data.point.Y);
                rect.X2 = rect.X1 - ((int)Math.Round((double)base.data.height));
                rect.Y2 = rect.Y1 - ((int)Math.Round((double)base.data.rWidth));
            }
            if (rect.X2 < rect.X1)
            {
                int num = rect.X2;
                rect.X2 = rect.X1;
                rect.X1 = num;
            }
            if (rect.Y2 < rect.Y1)
            {
                int num2 = rect.Y2;
                rect.Y2 = rect.Y1;
                rect.Y1 = num2;
            }
            Rectangle rectangle = new Rectangle(0, 0, 0, 0);
            rectangle = Rectangle.Intersect(new Rectangle(aRect.X1, aRect.Y1, aRect.X2, aRect.Y2), new Rectangle(rect.X1, rect.Y1, rect.X2, rect.Y2));
            if (((rectangle.X <= 0) && (rectangle.Y <= 0)) && ((rectangle.Width <= 0) && (rectangle.Height <= 0)))
            {
                return false;
            }
            return true;
        }

        public void ParseToTexts(Rect aRect, ArrayList NewElemes)
        {
            int num;
            float num2;
            string pourStr = "";
            string str2 = "";
            string str3 = "";
            DXFData aData = new DXFData();
            if (base.data.rotation == 0f)
            {
                aData = (DXFData)base.data.Clone();
                if (aRect.X1 > aData.point.X)
                {
                    pourStr = DXFExport.GetPourStr(aData.text);
                    str3 = aData.text.Substring(0, aData.text.Length - pourStr.Length);
                    num = (int)Math.Round((double)(pourStr.Length * ((aRect.X1 - aData.point.X) / aData.rWidth)));
                    for (int i = 0; i < num; i++)
                    {
                        str2 = str2 + pourStr[i];
                    }
                    pourStr = str3 + str2;
                    aData.rWidth = (base.data.rWidth * num) / ((float)pourStr.Length);
                    aData.text = pourStr;
                    DXFMText text = new DXFMText(aData);
                    NewElemes.Add(text);
                }
                aData = (DXFData)base.data.Clone();
                str2 = "";
                if (aRect.X2 < (aData.point.X + aData.rWidth))
                {
                    pourStr = DXFExport.GetPourStr(aData.text);
                    str3 = aData.text.Substring(0, aData.text.Length - pourStr.Length);
                    num2 = ((aData.point.X + aData.rWidth) - aRect.X2) / aData.rWidth;
                    num = (int)Math.Round((double)(pourStr.Length * num2));
                    aData.point.X += aData.rWidth - (aData.rWidth * num2);
                    for (int j = pourStr.Length; j < ((pourStr.Length - num) + 1); j--)
                    {
                        str2 = pourStr[j] + str2;
                    }
                    pourStr = str3 + str2;
                    aData.rWidth = (aData.rWidth * num) / ((float)pourStr.Length);
                    aData.text = pourStr;
                    DXFMText text2 = new DXFMText(aData);
                    NewElemes.Add(text2);
                }
            }
            if (base.data.rotation == 90f)
            {
                aData = (DXFData)base.data.Clone();
                if (aRect.X1 > aData.point.X)
                {
                    pourStr = DXFExport.GetPourStr(aData.text);
                    str3 = aData.text.Substring(0, aData.text.Length - pourStr.Length);
                    num = (int)Math.Round((double)(pourStr.Length * ((aRect.X1 - aData.point.X) / aData.rWidth)));
                    for (int k = 0; k < num; k++)
                    {
                        str2 = str2 + pourStr[k];
                    }
                    pourStr = str3 + str2;
                    aData.rWidth = (aData.rWidth * num) / ((float)pourStr.Length);
                    aData.text = pourStr;
                    DXFMText text3 = new DXFMText(aData);
                    NewElemes.Add(text3);
                }
                aData = (DXFData)base.data.Clone();
                str2 = "";
                if (aRect.X2 < (aData.point.X + aData.rWidth))
                {
                    pourStr = DXFExport.GetPourStr(aData.text);
                    str3 = aData.text.Substring(0, aData.text.Length - pourStr.Length);
                    num2 = ((aData.point.X + aData.rWidth) - aRect.X2) / aData.rWidth;
                    num = (int)Math.Round((double)(pourStr.Length * num2));
                    aData.point.X += aData.rWidth - (aData.rWidth * num2);
                    aData.point.Y += aData.rWidth - (aData.rWidth * num2);
                    for (int m = pourStr.Length; m < ((pourStr.Length - num) + 1); m--)
                    {
                        str2 = pourStr[m] + str2;
                    }
                    pourStr = str3 + str2;
                    aData.rWidth = (aData.rWidth * num) / ((float)pourStr.Length);
                    aData.text = pourStr;
                    DXFMText text4 = new DXFMText(aData);
                    NewElemes.Add(text4);
                }
            }
            if (base.data.rotation == 270f)
            {
                aData = (DXFData)base.data.Clone();
                if (aRect.Y2 < aData.point.Y)
                {
                    pourStr = DXFExport.GetPourStr(aData.text);
                    str3 = aData.text.Substring(0, aData.text.Length - pourStr.Length);
                    num = (int)Math.Round((double)(pourStr.Length * ((aData.point.Y - aRect.Y2) / aData.rWidth)));
                    for (int n = 0; n < num; n++)
                    {
                        str2 = str2 + pourStr[n];
                    }
                    aData.rWidth = (aData.rWidth * num) / ((float)pourStr.Length);
                    pourStr = str3 + str2;
                    aData.text = pourStr;
                    DXFMText text5 = new DXFMText(aData);
                    NewElemes.Add(text5);
                }
                aData = base.data;
                str2 = "";
                if (aRect.Y1 > (aData.point.Y - aData.rWidth))
                {
                    pourStr = DXFExport.GetPourStr(aData.text);
                    str3 = aData.text.Substring(0, aData.text.Length - pourStr.Length);
                    num2 = ((aData.rWidth - aData.point.Y) + aRect.Y1) / aData.rWidth;
                    num = (int)Math.Round((double)(pourStr.Length * num2));
                    aData.point.Y -= aData.rWidth - (aData.rWidth * num2);
                    for (int num8 = pourStr.Length; num8 < ((pourStr.Length - num) + 1); num8--)
                    {
                        str2 = pourStr[num8] + str2;
                    }
                    aData.rWidth = (aData.rWidth * num) / ((float)pourStr.Length);
                    pourStr = str3 + str2;
                    aData.text = pourStr;
                    DXFMText text6 = new DXFMText(aData);
                    NewElemes.Add(text6);
                }
            }
        }

        // Properties
        public string Text
        {
            get
            {
                return base.data.text;
            }
            set
            {
                base.data.text = (string)value.Clone();
            }
        }


    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -