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

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

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

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

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

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

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

Не получается с помощью итератора найти объект (осевую линию) внутри фрагмента

Автор Мирлан, 24.08.23, 13:11:09

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

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

Мирлан

Здравствуйте! У меня не получается с помощью итератора найти объект (осевую линию) внутри фрагмента. Но когда я ее вручную разрушаю и снова создаю макроэлемент то осевая линия находится программой. Как сделать так чтобы можно было найти Осевую линию внутри Фрагмента не разрушая и не создавая на ее основе макроэлемент?
/*
 * Created by SharpDevelop.
 * User: Home
 * Date: 22.08.2023
 * Time: 13:33
 *
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System;
using System.Runtime.InteropServices;
using KAPITypes;
using Kompas6API5;
using KompasAPI7;

namespace app
{
class Program
{       
public static void Main(string[] args)
{
KompasObject kompas = (KompasObject)Marshal.GetActiveObject("KOMPAS.Application.5");
ksDocument2D document2d = (ksDocument2D)kompas.ActiveDocument2D();

ksIterator iterator = kompas.GetIterator();

iterator.ksCreateIterator(0, 0); //Создаем итератор
var mref = iterator.ksMoveIterator("F"); //Получаем первый элемент

var typeObject = document2d.ksGetObjParam(mref, 0); //Получаем тип обьекта

Console.WriteLine("Ссылка на обьект {0}", mref); //ссылка на обьект
Console.WriteLine("Тип обьекта = {0}", typeObject); //Получение типа обьекта

Console.WriteLine("Поиск осевой линии в макроэлементе");
ksIterator iterator2 = kompas.GetIterator(); //Создаем второй итератор

iterator2.ksCreateIterator(ldefin2d.AXISLINE_OBJ, mref); //Ищем обьект Осевой линии в макроэлементе
var refAxisLine = iterator2.ksMoveIterator("F"); //Получаем тип обьекта внутри макроэлемента

Console.WriteLine("Ссылка на обьект = {0}", refAxisLine);
Console.WriteLine("Тип обьекта {0}", document2d.ksGetObjParam(refAxisLine, 1));

Console.ReadKey(true);
}
}
}

Я записал видео, посмотрите ее полностью понять мою проблему

Файл к проекту на C#
https://disk.yandex.com/d/a13HpZtvjtAFRw

Slaviation

Добрый день.
В самом фрагменте находится макроэлемент?
Если  да, то может так:
1. Первым итератором находим вставку фрагмента.
2. Вторым итератором ищем в найденной вставке фрагмента макроэлемент.
3. Третьим итератором ищем в найденном макроэлементе осевую линию.

msvteh


msvteh

на чертеже фрагмент это графический документ в документе, его можно открыть как документ-источник IInsertionDefinition::Open и пробежаться по объектам.