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
初步代码转换STL
最新推荐文章于 2024-11-08 19:55:35 发布