API7 Fragment

Автор Romiroz, 01.05.19, 13:45:08

« предыдущая - следующая »

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

Romiroz

Здравствуйте!

У кого-то есть пример как вставить фрагмент на API7?
Я написал следующее
   IInsertionsManager iix=(IInsertionsManager)doc2d;
         

            IDrawingDocument doc = (IDrawingDocument)doc2d;

            Views Views = doc.ViewsAndLayersManager.Views;

            IDrawingContainer drawingObjects = (IDrawingContainer)Views[2];


            drawingObjects.InsertionObjects.Add(iix.AddDefinition(ksInsertionTypeEnum.ksTBodyFragment, "Фрагмент.frw", "Фрагмент.frw"));


Как вставить?

DesignЯR

Странное имя файла фрагмента. Вот рабочий проверенный код
public void Experiment_InsertFragment()
        {
         
            KompasApp = (IApplication)kompas.ksGetApplication7();
            kompasDocument = KompasApp.ActiveDocument;
            kompasDocument2D = (IKompasDocument2D)kompasDocument;
            kompasDocument2D1 = (IKompasDocument2D1)kompasDocument2D;
            IInsertionsManager insertionManager = (IInsertionsManager)kompasDocument;
            // IDrawingDocument drawingDocument;
            IViewsAndLayersManager viewsAndLayersManager = kompasDocument2D.ViewsAndLayersManager;
            IViews views = viewsAndLayersManager.Views;
            IView view = views.ActiveView;
            IDrawingContainer drawingContainer = (IDrawingContainer)view;
            IInsertionObjects insertionObjects = drawingContainer.InsertionObjects;
            int IOcount = insertionObjects.Count;
            IInsertionDefinition insertionDefinition = null;
            IInsertionObject insertionObject = null;
            Kompas.Instance.Baloon("IOcount ="+ IOcount.ToString());//вывод сообщения
            for (int i = 0; i < IOcount; i++)
            {
                insertionObject = insertionObjects.InsertionObject[i];
                insertionDefinition = insertionObject.InsertionDefinition;
                Kompas.Instance.Baloon_AddText("Фрагмент №" + i.ToString());
                Kompas.Instance.Baloon_AddText("Name= " + insertionDefinition.Name);
                Kompas.Instance.Baloon_AddText("FileName= " + insertionDefinition.FileName);
                Kompas.Instance.Baloon_AddText("InsertionType= " + insertionDefinition.InsertionType.ToString());
                Kompas.Instance.Baloon();

            }
            string fragmentPath = @"D:\Фрагмент.frw";
            InsertionDefinition insertionDefinition_ = insertionManager.AddDefinition(ksInsertionTypeEnum.ksTReferenceFragment, fragmentPath, fragmentPath);
            insertionObjects.Add(insertionDefinition_);
            IOcount = insertionObjects.Count;
            insertionObject = insertionObjects.InsertionObject[IOcount - 1];
            insertionObject.SetPlacement(100, 100, 45, true);
            insertionObject.Update();
           
            Kompas.Instance.Baloon("Вставка фрагмента");
        }

Romiroz

Спасибо огромное, похоже в своих изысканиях немного не дошёл до цели... А я правильно понимаю, что библиотека kle современный аналог и заменитель lfw библиотеки? Или это я просто не нашёл как в 18-й версии сохранить lfw?

DesignЯR

Только такая инфа (см. картинки). kle походу все "глобализировала" в себя - и фрагменты и шаблоны , то есть теперь - прсто элементы.Библиотеку фрагментов не использую, но надо будет обратить внимание на сей инструмент.

Romiroz

А вы по какой причине не используете? А работающего примера на API 7 для работы с библиотекой фрагментов у вас нет?
Кстати откуда вы берёте инфу? Пытался в интернете найти описание работы метода Baloon() так и не нашёл. У вас там в примере Kompas.Instance.. Что за объект Kompas?

DesignЯR

ЦитироватьА вы по какой причине не используете?

Не было необходимости - будет время - поразбираюсь, может заюзаю.
ЦитироватьА работающего примера на API 7 для работы с библиотекой фрагментов у вас нет?

Нет
ЦитироватьКстати откуда вы берёте инфу?

Справка Компаса, SDK и примеры Step1...12
ЦитироватьПытался в интернете найти описание работы метода Baloon() так и не нашёл. У вас там в примере Kompas.Instance.. Что за объект Kompas?

В примере Gayka описан класс Kompas. там эта не совсем понятная Instance - вроде как для макроэлементов библиотечных, но по инерции применяю и в экспериментах.Часто использую при отладке  библиотеки, чтобы не писать в лог файл. Если без статического класса компаса, то работает это так

.......
private KompasObject kompas;
.......
public void ExternalRunCommand([In] short command, [In] short mode, [In, MarshalAs(UnmanagedType.IDispatch)] object kompas_)
        {
            kompas = (KompasObject)kompas_;  if (kompas == null) return;
         
          switch (command)
            {
                case 1: Experiment1(); break; //
                case 2:  Experiment2(); break; //
                case 3: Experiment3(); break; //
                case 4:  Experiment4(); break; //
            }
            Baloon("Успешное завершение работы библиотеки");//убедится что отработал весь код библиотеки
        }
......
#region Baloon-всплывающее сообщение
        public string BaloonText = "";
        public void Baloon(string message) //если надо просто выдать строку
        {   kompas.ksGetApplication7().MessageBoxEx(message, "Знаете ли Вы что...", 48);
            BaloonText = "";  }
        public void Baloon() //выдать строку из накопленного буфера
        {  kompas.ksGetApplication7().MessageBoxEx(BaloonText, "Знаете ли Вы что...", 48);
            BaloonText = "";   }
        public void Baloon_AddText(string text) //добавление строки в буфер с переводом строки
        {  BaloonText = BaloonText + text + Environment.NewLine;  }
        public void Baloon_Clear()//очистка буфера
        {  BaloonText = "";   }
        #endregion