Ошибка при разрушении макроэлемента C#

Автор Dragon3DGraff, 29.01.18, 00:20:54

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

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

Dragon3DGraff

Добрый день

Беру фасонку (выделенное помещаю в буфер обмена), вставляю ее в другой вид и разрушаю таким кодом


private void DestroyAllObjInView(reference VN)
        {
            reference obj;
            ksIterator iter = (ksIterator)kompas5.GetIterator();
            if (iter == null)
                return;
            if (iter.ksCreateIterator(ldefin2d.ALL_OBJ, VN))
            {
                //создадим итератор для хождения по виду
                obj = iter.ksMoveIterator("F");
                if (doc5.ksExistObj(obj) == 1)
                {
                    do
                    {
                        int TypeOfObject = doc5.ksGetObjParam(obj, 0, 0); //определим тип объекта
                        if (TypeOfObject == 26 || //контур
                            TypeOfObject == 27 || //нетипи­зиро­ванный макро­эле­мент                         
                            TypeOfObject == 31 || //ломаная линия
                            TypeOfObject == 35 || //прямоугольник
                            TypeOfObject == 36 || //правильный многоугольник
                            TypeOfObject == 72)   //мультилиния
                        {
                           // doc5.ksLightObj(obj, 1);
                            int result = doc5.ksDestroyObjects(obj); //Разрушим 
                           // kompas5.ksMessage("result = " + result);
                            DestroyAllObjInView(VN);
                        }

                    }
                    while (doc5.ksExistObj(obj = iter.ksMoveIterator("N")) == 1);
                }
                iter.ksDeleteIterator();
            }

        }


Но при разрушении возникает ошибка, при чем не всегда, а при каких то непонятных условиях. Фасонка вставлена с другого чертежа. Все чертится в 2D. Эти отверстия, которые "улетели" вверх были макроэлементом. При этом компас вылетает. При этом если разрушаю руками, не кодом, то все нормально
В чем может быть проблема?

У макроэлементов нужно проверять признак зеркальности, те отверстия зеркальные.

Dragon3DGraff

Цитата: Sabahs от 29.01.18, 07:01:37
У макроэлементов нужно проверять признак зеркальности, те отверстия зеркальные.
А не подскажите, как проверить? И самое главное как от этого избавиться?

Смотреть параметр MirrorSymmetry у макроэлемента, если оно есть, то придётся поиграться.

Dragon3DGraff

Подскажите, пожалуйста, как получить ksGetMacroPlacementEx...
ни в  doc5 = (ksDocument2D)kompas5.ActiveDocument2D(); ни в  doc7 = (IKompasDocument2D)appl7.ActiveDocument; нет такого... там только ksGetMacroPlacement, а в нем нет MirrorSymmetry