Как реализовать анализ толщины стенки для проекта .net
У меня есть .stl для 3D-печати. И я хочу проанализировать толщину стенок этой модели перед печатью. Я понятия не имею ни о каких инструментах. Могу ли я создать любое консольное или wpf-приложение для расчета толщины стенок и стоимости печати? Пожалуйста, помогите мне.
@user4667380, 👍3
Обсуждение3 ответа
Если вы говорите о полом объекте, например о кубе с полым центром. Толщина стенки определяется моделью.
Если вы говорите о твердом объекте, то толщина стенки определяется диаметром сопла, умноженным на количество стенок. Все это настраивается вашим программным обеспечением для сращивания. Если у вас сопло 0,5 мм и вы печатаете по периметру 3, то ваша стена должна быть 1,5 мм. Если вы хотите, чтобы стена была 2 мм, то вы отрегулируете свои периметры на 4. Все, что находится в этих стенах, будет тем, что вы выберете для заполнения.
Я работаю с ASP.NET, Windows Forms и Консольные приложения. Я уверен, что вы можете найти библиотеки, способные принимать 3D-модели, но я не думаю, что это будет иметь значение, потому что толщина печати определяется вашими настройками сращивания.
Кроме того, для стоимости печати я рекомендую просто использовать Cura, которую вам просто нужно подключить к некоторой информации о стоимости филамента, и она сообщит вам ориентировочную стоимость, мм использования нити и время.
Это не совсем так. Большинство слайсеров допускают чрезмерную и недостаточную экструзию стенок, чтобы обеспечить наличие стенок, которые не связаны конкретно диаметром используемого сопла. slic3r, Simplify3D и Cura, по крайней мере, все имеют эти опции. Я бы предположил, что вы захотите прочитать g-код, чтобы получить конкретные детали, поскольку способ нарезки модели варьируется, а сама модель не всегда является хорошим показателем., @Jesse Williams
Я сам использую slic3r. В моем случае каждая напечатанная стена соответствует друг другу. Я никогда не замечал, чтобы одна стена была толще или тоньше. Они, как правило, немного больше, чем моя насадка 0,4 мм, но это потому, что они немного хлюпают. Но при 3 периметрах я должен получить стенки 1,2 мм, но при измерении я получаю около 1,3 мм., @Athanasios Karagiannis
Если вас беспокоит, что стенки файла stl могут быть слишком тонкими для печати на принтере, MeshMixer-отличный инструмент от Autodesk, который поможет проверить и устранить проблемы с сеткой (включая толщину стенки). Это бесплатно для создателей и педагогов.
Есть много полезных руководств Вот один из них https://all3dp.com/meshmixer-tutorial/
Я не совсем уверен, что вы хотите сделать, но я добавлю некоторую информацию, которая, как мне кажется, поможет, и тогда, надеюсь, вы сможете выяснить, что вам нужно знать, или задать другой вопрос.
Когда вы спрашиваете о толщине стенки, вы можете иметь в виду две разные вещи. Стена в модели, так что вы можете говорить о попытке напечатать тонкую стену, выходящую из модели. Для анализа настройки тонких стенок некоторые слайсеры изменяют величину экструзии, чтобы печатать более толстые или тонкие линии, и чтобы найти эти настройки, вам нужно будет посмотреть на g-код. Или вы можете говорить о оболочке модели, о внешней поверхности, и для этого вы также можете провести анализ в настройках слайсера, посмотрев на количество периметров, которые слайсер попытается напечатать.
Для расчета стоимости печати вам понадобится количество использованного материала, это также будет указано в файле g-кода. Вы можете вычислить это, выполнив каждую команду G1 и выяснив, сколько нити было экструдировано за каждое движение принтера. (Не некоторые слайсеры сбрасывают это значение до нуля после каждого слоя, и это становится сложным, когда принтер начинает втягивать нить во время перемещения). Или же большинство слайсеров имеют закомментированную строку g-кода в начале или конце файла с указанием количества филамента.
Если вы проанализируете файл .stl, вы также можете обнаружить, что вам нужно восстановить файл модели, потому что многие файлы .stl созданы для 3D-графики, а не для печати, и поэтому они могут иметь пересекающиеся треугольники и не быть водонепроницаемыми.
Не все файлы .stl одинаковы, они могут быть текстовыми или двоичными файлами, это некоторый код c#, который будет считывать оба формата в список треугольников в файле для вас.
using System.Numerics.Vectors;
void Main(){
var facets = readStl(@"C:\stls\teapot.stl");}
public class facet
{
public Vector3 norm = new Vector3();
public Vector3 vecA = new Vector3();
public Vector3 vecB = new Vector3();
public Vector3 vecC = new Vector3();
public facet(Vector3 A, Vector3 B, Vector3 C, Vector3 N)
{
norm = N;
vecA = A;
vecB = B;
vecC = C;
}
}/* facet */
public static System.Collections.Generic.List<facet> readStl(string file)
{
// проверьте, есть ли двоичный или текстовый fomat
//Консоль.WriteLine("середина");
bool isText;
System.Collections.Generic.List<facet> facets = new System.Collections.Generic.List<facet>();
using (System.IO.BinaryReader reader = new System.IO.BinaryReader(System.IO.File.Open(file, System.IO.FileMode.Open)))
{
//Консоль.WriteLine("Проверка бинарности");
string fileHeading;
fileHeading = new string(reader.ReadChars(80));
if (fileHeading.Contains(@"solid"))
{
isText = true;
//Консоль.WriteLine("isText true");
}
else
{
isText = false;
//Консоль.WriteLine("isText false");
}
if(!isText)
{
// обработать двоичный файл
Console.WriteLine("Is binary");
uint numberOfTriangles = reader.ReadUInt32();
//Debug.Log("Количество треугольников:" + NumberOfTriangles.toString());
System.Console.WriteLine("Number of Triangles: " + numberOfTriangles.ToString());
for(int i = 0; i < numberOfTriangles - 1; i++)
{
Vector3 normals = new Vector3();
Vector3 vecA = new Vector3();
Vector3 vecB = new Vector3();
Vector3 vecC = new Vector3();
System.UInt16 byteCount = new System.UInt16();
normals.X = reader.ReadSingle();
normals.Y = reader.ReadSingle();
normals.Z = reader.ReadSingle();
vecA.X = reader.ReadSingle();
vecA.Y = reader.ReadSingle();
vecA.Z = reader.ReadSingle();
vecB.X = reader.ReadSingle();
vecB.Y = reader.ReadSingle();
vecB.Z = reader.ReadSingle();
vecC.X = reader.ReadSingle();
vecC.Y = reader.ReadSingle();
vecC.Z = reader.ReadSingle();
byteCount = reader.ReadUInt16();
facets.Add(new facet(vecA, vecB, vecC, normals));
}
}
}
if (isText)
{
// читать файл текстового формата
Console.WriteLine("Is text file");
//Консоль.WriteLine("чтение текстового файла");
using (System.IO.StreamReader reader = System.IO.File.OpenText(file))
{
string line = @"";
string fileHeader = @"";
line = reader.ReadLine();
fileHeader = line.Substring(line.IndexOf("solid") + 5).Trim();
line = "";
System.Console.WriteLine(@"file header: " + fileHeader);
bool endOfFile = true;
while (endOfFile)
{
line = reader.ReadLine();
if (!reader.EndOfStream)
{
Vector3 normals = new Vector3();
Vector3 vecA = new Vector3();
Vector3 vecB = new Vector3();
Vector3 vecC = new Vector3();
string[] nums = line.Replace("facet", "").Replace("normal", "").Trim().Split(' ');
normals.X = (float)System.Double.Parse(nums[0], System.Globalization.NumberStyles.Float);
normals.Y = (float)System.Double.Parse(nums[1], System.Globalization.NumberStyles.Float);
normals.Z = (float)System.Double.Parse(nums[2], System.Globalization.NumberStyles.Float);
line = "";
line = reader.ReadLine(); // внешний цикл
line = reader.ReadLine(); // vertex
string[] vecsA = line.Replace("vertex", "").Trim().Split(' ');
vecA.X = (float)System.Double.Parse(vecsA[0], System.Globalization.NumberStyles.Float);
vecA.Y = (float)System.Double.Parse(vecsA[1], System.Globalization.NumberStyles.Float);
vecA.Z = (float)System.Double.Parse(vecsA[2], System.Globalization.NumberStyles.Float);
line = "";
line = reader.ReadLine(); // vertex
string[] vecsB = line.Replace("vertex", "").Trim().Split(' ');
vecB.X = (float)System.Double.Parse(vecsB[0], System.Globalization.NumberStyles.Float);
vecB.Y = (float)System.Double.Parse(vecsB[1], System.Globalization.NumberStyles.Float);
vecB.Z = (float)System.Double.Parse(vecsB[2], System.Globalization.NumberStyles.Float);
line = "";
line = reader.ReadLine(); // vertex
string[] vecsC = line.Replace("vertex", "").Trim().Split(' ');
vecC.X = (float)System.Double.Parse(vecsC[0], System.Globalization.NumberStyles.Float);
vecC.Y = (float)System.Double.Parse(vecsC[1], System.Globalization.NumberStyles.Float);
vecC.Z = (float)System.Double.Parse(vecsC[2], System.Globalization.NumberStyles.Float);
line = "";
line = reader.ReadLine(); // endloop
line = reader.ReadLine(); // endfacet
facets.Add(new facet(vecA, vecB, vecC, normals));
}
else
{
endOfFile = false;
}
}// цикл while
System.Console.WriteLine("finished reading file");
}
}
return facets;
}/* readStl */
- Какие виды зазоров/допусков следует использовать при проектировании деталей, которые подходят друг к другу?
- Инструмент для измерения в STL-файлах
- Каков самый простой способ изменить/изменить размер объекта внутри STL-файла?
- Экспорт STL как ASCII или двоичный?
- Будут ли 3D напечатные игральные кости честными?
- Как сделать стены толще с помощью meshmixer или meshlab
- Смазка для звездочки PLA
- Есть ли способ печати с ABS без корпуса?
Здравствуйте, да, вы можете создать приложение для анализа толщины стенок, но как это сделать-это вопрос программирования, а не вопрос 3D-печати, @Nir