Тонирование заголовков в спецификации через API

Автор Тема: Тонирование заголовков в спецификации через API  (Прочитано 3049 раз)

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

Оффлайн antinopolАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Пишу плагин по тонированию (заливке) заголовков спецификации цветом. И столкнулся с такой проблемой: когда открываешь спецификацию, цвет ячеек такой, который я задал плагином, а вот на листе остается старый цвет.

То есть за отображение цвета отвечают два свойства класса TableCellStyle:
  • BackgroundColor (The background color of this cell in the grid view) - цвет в спецификации
  • SheetBackgroundColor (The background color of this cell in the sheet view) - цвет на листе

Но SheetBackgroundColor только для чтения и как его изменить я не знаю.

Привожу код рабочий код для pyRevit

Код - Python [Выбрать]
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import datetime
  5. from datetime import *
  6. import clr
  7. import os, sys
  8.  
  9. clr.AddReference("RevitAPI")
  10. import Autodesk
  11. from Autodesk.Revit.DB import *
  12. from Autodesk.Revit import ApplicationServices
  13. clr.AddReference('System')
  14. import System
  15. from System.Collections.Generic import *
  16. from System import Byte
  17.  
  18. uidoc = __revit__.ActiveUIDocument
  19. doc = uidoc.Document
  20. app = __revit__.Application
  21. printManager = doc.PrintManager
  22.  
  23. schedule = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Schedules).WhereElementIsNotElementType().ToElements()
  24. schedule = [x for x in schedule if x.ViewSpecific is False and x.IsTemplate is False]
  25.  
  26.  
  27. color = Autodesk.Revit.DB.Color(System.Byte.Parse(str(255)), System.Byte.Parse(str(255)), System.Byte.Parse(str(255)))
  28.  
  29. transaction = Transaction(doc)
  30. transaction.Start("-")
  31. for x in schedule:
  32.         tb = x.GetTableData().GetSectionData(SectionType.Body)
  33.         columns = tb.NumberOfColumns
  34.         rows = tb.NumberOfRows
  35.         fr = tb.FirstRowNumber
  36.         fc = tb.FirstColumnNumber
  37.         for r in range(fr, rows):
  38.                 for c in range(fc, columns):
  39.                         if      tb.IsValidColumnNumber(c) and tb.IsValidRowNumber(r) and tb.AllowOverrideCellStyle(r,c):
  40.                                 style = tb.GetTableCellStyle(r,c)
  41.                                 style.BackgroundColor = color
  42.                                 tb.SetCellStyle(r,c,style)
  43.                                 tb.RefreshData()
  44. transaction.Commit()

Если после обработкой плагином вывести эти свойства цветов спецификации, то они будут разными. То есть в спецификации будем видеть переопределенный цвет, а на листе останется старый.

Подскажите, каким методом нужно пользоваться, чтобы залить цветом еще и на листе.


« Последнее редактирование: 21-12-2019, 23:46:55 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Приветствую на форуме!
Насколько я понял единственная возможность - это иметь готовую ячейку-образец с соответствующим TableCellStyle, у которой уже установлен нужный SheetBackgroundColor и копировать этот TableCellStyle в TableCellStyle ячейки, которой ты хочешь менять цвет фона: https://stackoverflow.com/questions/51080561/schedule-cell-override-background-color-not-showing-in-sheet/51971842

P.S.: У меня в подписи написано как следует форматировать код для нашего форума.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн antinopolАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Спасибо. Буду тестить.