Вставка изображения в ячейку спецификации.

Автор Тема: Вставка изображения в ячейку спецификации.  (Прочитано 5609 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Коллеги, добрый день.

Нужна помощь в понимании того, как в ячейки таблицы спецификации вставлять изображения.

Из интерфейса это сделать можно, а вот как программно - это вопрос! Объект ViewSchedule!

Должно получиться что-то вроде этого:


Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Евгений, сам не пробовал, но в API нужные методы есть.
Код - C# [Выбрать]
  1. // получаем табличные данные
  2. var tableData= viewSchedule.GetTableData();
  3.  
  4. //получаем заголовок таблицы
  5. TableSectionData header = tableData.GetSectionData(SectionType.Header);
  6.  
  7. //вставляем картинку
  8. header.InsertImage(1,1, new ElementId(123));
  9.  

Судя по всему, изображение надо сначала вставить в проект с помощью Document.Import и затем использовать идентфикатор вставленного изображения в спецификации[/code]

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Виктор, ну я в принципе и понял, что везде есть легкие подводные камешки )))

Попробую и отпишусь.

Отмечено как Решение Пашин Евгений 03-10-2016, 10:19:44

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Полное решение для данной темы выглядит так:

Код - vb.net [Выбрать]
  1.     Private Sub bInsertImageToProjectAndAlsoToTableCell()
  2.        
  3.         ' Активный UI документ
  4.         Dim uiDoc As UIDocument = commandData.Application.ActiveUIDocument
  5.                 ' Текущий документ
  6.         Dim Doc As Document = uiDoc.Document
  7.         ' Вставка изображения в проект
  8.         Dim ImageID As ElementId = ElementId.InvalidElementId
  9.         Using transaction As New Transaction(Doc, "Image type")
  10.             transaction.Start()
  11.             Dim imaget As ImageType = ImageType.Create(Doc, "D:\Пашин\Revit_Ribbon_Menu\Images\00011.png")
  12.             ImageID = imaget.Id
  13.             transaction.Commit()
  14.         End Using
  15.  
  16.         ' Получаем список спецификаций в проекте
  17.         Dim coll As FilteredElementCollector = New FilteredElementCollector(Doc).OfClass(GetType(ViewSchedule))
  18.        
  19.                 ' ...
  20.                
  21.         ' Перебираем все спецификации в проекте
  22.         For Each rvtViewSchedule As Autodesk.Revit.DB.ViewSchedule In coll
  23.  
  24.                         ' ...
  25.                        
  26.             ' Определяем таблицу спецификации
  27.             Dim rvtTableData As Autodesk.Revit.DB.TableData = rvtViewSchedule.GetTableData
  28.             ' Определяем раздел-«ГОЛОВА» таблицы спецификации
  29.             Dim rvtTableDataHeader As TableSectionData = rvtTableData.GetSectionData(SectionType.Header)
  30.            
  31.                         ' ...
  32.                        
  33.                         ' Вставка изображения в шапку таблицы спецификации
  34.             If rvtTableDataHeader.IsValidImageSymbolId(ImageID) Then
  35.                 Using transaction As New Transaction(Doc, "Image inserting")
  36.                     transaction.Start()
  37.                     rvtTableDataHeader.InsertImage(0, 0, ImageID)
  38.                     transaction.Commit()
  39.                 End Using
  40.             End If
  41.  
  42.         Next
  43.  
  44.     End Sub


Тоже самое на C#

Код - C# [Выбрать]
  1. public void InsertImage2Schedule()
  2. {
  3.         // Вставка изображения
  4.         Document revitDoc = this.ActiveUIDocument.Document;
  5.         ElementId imageId = ElementId.InvalidElementId;
  6.         using(Transaction tran = new Transaction(revitDoc, "Image Type"))
  7.         {
  8.                 tran.Start();
  9.                 ImageType imageTpe = ImageType.Create(revitDoc, "C:\\00011.png");
  10.                 imageId = imageTpe.Id;
  11.                 tran.Commit();
  12.         }
  13.  
  14.         // Вставка изображения в ячейку таблицы спецификации
  15.         ViewSchedule vs = this.ActiveUIDocument.ActiveView as ViewSchedule;
  16.         TableData td = vs.GetTableData();
  17.         TableSectionData tsd = td.GetSectionData(0);
  18.         if(tsd.IsValidImageSymbolId(imageId))
  19.         {
  20.                 using(Transaction tran = new Transaction(revitDoc, "Insert Image"))
  21.                 {
  22.                         tran.Start();
  23.                         tsd.InsertImage(0, 0, imageId);
  24.                         tran.Commit();
  25.                 }
  26.         }
  27. }
  28.  


Спасибо, Виктору за подсказку.

Оффлайн RevitTormentor

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Добрый день. А на лист можно как то разместить изображение? В ручную простым перетаскиванием получается. А программно у ViewSheet нет никакого Insert.