API7 перевести координаты из ЛСК детали в СК сборки

Автор Misha, 28.09.10, 13:44:25

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

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

Misha

Подскажите пожалуйста, кто пользуется API7. Я программным способ собираю сборку и мне нужно вывести координаты 3D точек, которые находятся на деталях сборки. Ниже приведенный код возвращает координаты в ЛСК детали. Каким образом нужно переводить координаты из ЛСК детали в СК сборки?

for (int partsCount = 0; partsCount < parts7.Count; partsCount++)
{
        IModelContainer NewModelContainer = GetModelContainer((IPart7) parts7[partsCount]);

        if (NewModelContainer != null)
        {
                   IPoints3D points3D = NewModelContainer.Points3D;

                   for (int pointsCount = 0; pointsCount < NewModelContainer.Points3D.Count; pointsCount++)
                   {
                              point3D = points3D.get_Point3D(pointsCount);

                              if (part7.TransferObjects(point3D.X, null, false))// по идее должно быть TRUE, но всегда FALSE ????????????????
                                    {
                                        classDetails[partsCount].Points[pointsCount].CoordinateX = point3D.X;
                                    }
                    .........
                    }

Misha

Если кому  интересно, то я нашел свою ошибку. Выложу код, если необходимы комментарии пишите (просто времени нет).

                    ksPart part = (ksPart) doc.GetPart(i); // первая деталь в сборке

                    if (part != null)
                    {
                        ksEntityCollection collect =
                            (ksEntityCollection) part.EntityCollection((short) Obj3dType.o3d_point3D);

                        int count = collect.GetCount();

                        if (count != 0)
                        {
                            for (int g = 0; g < count; g++)
                            {
                                ksEntity k = (ksEntity) collect.GetByIndex(g);

                                IPoint3D mObj1 = (IPoint3D) kompas.TransferInterface(k,(int)Kompas6Constants.ksAPITypeEnum.ksAPI7Dual, 0);


                                ksPlacement ksPlacement = (ksPlacement) part.GetPlacement();

                                double x = 0;// mObj1.X;
                                double y = 0;// mObj1.Y;
                                double z = 0;// mObj1.Z;

                                ksPlacement.PointOn(mObj1.X, mObj1.Y, ref x,ref y,ref z);

                                //if (part.TransformPoint(ref x, ref y, ref z, doc))
                                {
                                    classDetails.Points[g].CoordinateX = x;
                                    classDetails.Points[g].CoordinateY = y;
                                    classDetails.Points[g].CoordinateZ = z;
                                }
                             
                            }
                        }
                    }
+ Благодарностей: 1