Генерация STL файла

Автор Skorb, 07.03.16, 17:43:05

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ладно, сейчас нужно в цех идти, вернусь проверю на сборке.

Skorb

Проверьте ради интереса на сборке, хотя я уже проверил свой код на модели болта и он все-равно криво выдает, ошибка в моем коде, и можете еще пояснить ваш участок кода


While II<>-1 do
begin
и до самого конца

для чего Вы 2 раза получаете нормали?

Это ошибка, просто когда копировал забыл удалить, первый, тут на файл он не влияет, только время зря тратит, у себя сейчас его удалил.

Skorb

Хорошо, но я доделал программу свою и она выдает такой stl

Skorb


Skorb

Правда ваш файл больше моего по-размеру, но с первого взгляда вроде все также


       void Getsurface()
        {
            StreamWriter sw = new StreamWriter("C:\\New1.txt");
            sw.WriteLine("solid");
            ksDocument3D iDocument3D = (ksDocument3D)kompas.ActiveDocument3D();
           
            ksPart part = (ksPart)iDocument3D.GetPart((short)Part_Type.pTop_Part);
            ksEntityCollection Ientitycol = (ksEntityCollection)part.EntityCollection((short)Obj3dType.o3d_face);
            double x1 = 0, y1 = 0, z1 = 0, x2 = 0, y2 = 0, z2 = 0, res = 0;
            for (int r = 0; r < Ientitycol.GetCount(); r++)
            {
                ksEntity Ientity = (ksEntity)Ientitycol.GetByIndex(r);
                ksFaceDefinition IFaceDefinition = (ksFaceDefinition)Ientity.GetDefinition();
                if (IFaceDefinition != null)
                {
                    ksSurface surface = (ksSurface)IFaceDefinition.GetSurface();
                    ksTessellation ITessellation = (ksTessellation)IFaceDefinition.GetTessellation();
                    if ((ITessellation != null) && (surface != null))
                    {
                        surface.GetGabarit(out x1, out y1, out z1, out x2, out y2, out z2);
                        res = Math.Sqrt(Math.Abs((x1 - x2) * (x1 - x2)) + Math.Abs((y1 - y2) * (y1 - y2)) + Math.Abs((z1 - z2) * (z1 - z2)));
                        ITessellation.SetFacetSize(Convert.ToDouble(res * 0.01));
                        ksFacet IFacet = (ksFacet)ITessellation.GetFacet();
                        float x = 0, y = 0, z = 0;
                        float xn = 0, yn = 0, zn = 0;
                        int count = 0;
                        for (int j = 0; j < ITessellation.GetFacetsCount(); j++)
                        {
                            count = 0;
                            ITessellation.GetFacetData(j, IFacet);
                            for (int k = 0; k < IFacet.GetPointsCount(); k++)
                            {
                                if (k == 0)
                                {
                                    IFacet.GetNormal(k, out xn, out yn, out zn);
                                    sw.WriteLine("facet normal " + xn + " " + yn + " " + zn);
                                    sw.WriteLine("outer loop");
                                }
                                IFacet.GetPoint(k, out x, out y, out z);
                                sw.WriteLine("vertex " + x + " " + y + " " + z);
                            }
                            sw.WriteLine("endloop");
                            sw.WriteLine("endfacet");
                        }
                    }
                }
            }
            sw.WriteLine("endsolid");
            sw.Close();
            kompas.ksMessage("ready");
        }

Тот файл, что Вы выложили Esprit не открыл, написал, что ошибка в файле, со сборки я STL сделал, но ориентация остаётся, такая же, как в детали, т.е. нужно преобразовывать координаты.

Skorb

А обязательно преобразовывать интерфейс документа из Api7 в Api5?

У меня он по другому получен.

Skorb

Преобразовывать координаты в координаты ЛСК сборки?


Skorb

А не подскажете каким интерфейсом воспользоваться?

Прямого вроде нет, т.ч. Вам придётся немного попотеть.

Skorb

А можно ли было тогда сделать так: средствами компаса например doc.SaveAS(...) пересохранить детали из сборки в STL, а затем пробегаться по нормалям и вершинам в этом STL и преобразовывать их в соответствии с ЛСК сборки?

Не всё так просто, как Вам кажется, это Вам не поможет.

Skorb

а что тогда поможет?


Skorb

просто у меня стоит задача сформировать stl файлы, такие, чтобы в них были детали и их координаты как в сборке. Например при их открытии потом в блендере например они все вставали на свои позиции, как в сборке, я думал что формирование собственного STL пожет :~

Кто Вам мешает, реализовывайте свою задачу, Вы для начала, одну деталь сделайте, чтобы нормально открывало, а потом о сборках думать будете.

Skorb

Дак Вы же говорите, что позиции остаются те же, что и в модели