• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

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

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

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

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

Ваш файл читается с ошибкой, вот, что я Вам говорю, а координаты пересчитать, это уже дело техники.
+ Благодарностей: 1

Skorb

Дописал генератор STL, полностью рабочий, работает со сборкой, спасибо всем за помощь:


        void Getsurface()
        {
            doc = (ksDocument3D)kompas.ActiveDocument3D();
            ksPartCollection coll = (ksPartCollection)doc.PartCollection(true);
            for (int i = 0; i < coll.GetCount(); i++)
            {
                ksPart part = (ksPart)coll.GetByIndex(i);
                StreamWriter sw = new StreamWriter("C:\\libraryForCompas\\" + DeleteSpace(RusToEng(part.name)) + ".stl");
                sw.WriteLine("solid");
                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.1));
                            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 " + Math.Round(xn, 15) + " " + Math.Round(yn, 15) + " " + Math.Round(zn, 15));
                                        sw.WriteLine("outer loop");
                                    }
                                    IFacet.GetPoint(k, out x, out y, out z);
                                    sw.WriteLine("vertex " + Math.Round(x, 15) + " " + Math.Round(y, 15) + " " + Math.Round(z, 15));
                                }
                                sw.WriteLine("endloop");
                                sw.WriteLine("endfacet");
                            }
                        }
                    }
                }
                sw.WriteLine("endsolid");
                sw.Close();
            }
            DirectoryInfo dir = new DirectoryInfo("C:\\libraryForCompas");
            foreach (var item in dir.GetFiles("*.stl"))
            {
                string cont = "";
                StreamReader sr = new StreamReader("C:\\libraryForCompas\\"+item);
                cont = sr.ReadToEnd();
                sr.Close();
                cont = cont.Replace(',', '.');
                StreamWriter sw = new StreamWriter("C:\\libraryForCompas\\"+item);
                sw.WriteLine(cont);
                sw.Close();
            }
            kompas.ksMessage("ready");
        }


а теперь не подскажете хотя бы примерный алгоритм для перевода координат в ЛСК сборки?

Skorb

Можно ли создать свою ЛСК для сборки и выполнять в ней расчеты?