初步代码转换STL

这是一个将STL文件转换为特定格式的C#代码实现,包括读取STL文件、检查数据的有效性、转换和写入新文件。代码中包含了处理Facet、点和法线的逻辑,并使用了字符串格式化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    public class MyFileSTLM
    {
        private double[, ,] stldata = null;
        public int FaceCount = 0;
        public string Srs = null;
        public int PointCount = 1;
        public double kt = 1;
        int para = 300;

        /// <summary>
        /// 小数点后面四位,3D studio默认是6位
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private string ToStr(double data)
        {
            if (Math.Abs(data) < 0.0001)
            {
                return "0.0000";

            }
            data = Math.Round(data, 4);


            if (data == (double)((int)data))
            {

                return data.ToString() + ".0000";
            }

            return data.ToString();



        }

        private bool CheckData(int t)
        {
            try
            {
                if (Math.Abs(stldata[t, 0, 0] - stldata[t, 1, 0]) <= 0.0001 && Math.Abs(stldata[t, 0, 1] - stldata[t, 1, 1]) <= 0.0001 && Math.Abs(stldata[t, 0, 2] - stldata[t, 1, 2]) <= 0.0001)
                {
                    return false;
                }
                if (Math.Abs(stldata[t, 0, 0] - stldata[t, 2, 0]) <= 0.0001 && Math.Abs(stldata[t, 0, 1] - stldata[t, 2, 1]) <= 0.0001 && Math.Abs(stldata[t, 0, 2] - stldata[t, 2, 2]) <= 0.0001)
                {
                    return false;
                }


                double a = Math.Sqrt(Math.Pow(stldata[t, 0, 0] - stldata[t, 1, 0], 2) + Math.Pow(stldata[t, 0, 1] - stldata[t, 1, 1], 2) + Math.Pow(stldata[t, 0, 2] - stldata[t, 1, 2], 2));
                double b = Math.Sqrt(Math.Pow(stldata[t, 0, 0] - stldata[t, 2, 0], 2) + Math.Pow(stldata[t, 0, 1] - stldata[t, 2, 1], 2) + Math.Pow(stldata[t, 0, 2] - stldata[t, 2, 2], 2));
                double c = Math.Sqrt(Math.Pow(stldata[t, 2, 0] - stldata[t, 1, 0], 2) + Math.Pow(stldata[t, 2, 1] - stldata[t, 1, 1], 2) + Math.Pow(stldata[t, 2, 2] - stldata[t, 1, 2], 2));

                if (Math.Abs(a + b - c) <= 0.0001 || Math.Abs(a + c - b) <= 0.0001 || Math.Abs(c + b - a) <= 0.0001)
                {
                    return false;
                }


                return true;

            }
            catch
            {

                return false;
            }



        }

        private bool GetSTLData(string FileName)
        {


            FileStream fs = null;
            StreamReader sr = null;
            try
            {
                if (FileName == null || !File.Exists(FileName))
                {
                    return false;
                }
                //一个面为三个点,
                //前三个为 X,Y,Z, 法线的x,y,z U,V
                double[, ,] Buff = new double[1000000, 3, 9];
                FaceCount = 0;
                PointCount = 0;

                string StrLine = null;

                string[] SplitChar;

                fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
                sr = new StreamReader(fs);  //使用StreamReader类来读取文件 
                sr.BaseStream.Seek(0, SeekOrigin.Begin);
                while ((StrLine = sr.ReadLine()) != null)
                {
                    StrLine = StrLine.Trim();
                    if (StrLine.IndexOf("facet normal ") >= 0)
                    {
                        SplitChar = StrLine.S
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值