Change Text Font Type using Dynamo

Главная Форумы Dynamo Ноды Change Text Font Type using Dynamo

Помечено: 

В этой теме 25 ответов, 6 участников, последнее обновление  txt 11 мес. назад.

Просмотр 11 сообщений - с 16 по 26 (из 26 всего)
  • Автор
    Сообщения
  • #6693 Score: 0

    Denis
    Участник
    5 pts

    Так получилось, что возник вопрос по этой теме и на данный момент не могу найти решение – тема: https://forum.dynamobim.com/t/change-parameter-of-elements-into-family/14695

    Если в кратце, то получается изменить Text Font внутри проекта, но не получается внутри семейств. Когда заходишь в документ семейства он видити все отфильтрованные елементы, но не может произвести изменения нужного параметра (в данном случае Text Font )

    Там выложен код скрипта, может быть у кого-то будут мысли?

    #6694 Score: 0

    txt
    Модератор
    90 pts

    Шрифт текста (для метки в семействе марок) изменить можно через

    но вначале нужно открыть семейство а затем запустить Динамо (в противном случае напишет нет ссылки  на этот документ – ну , вы знаете), но открывать так каждое семейство это трэш

    #6696 Score: 2

    Denis
    Участник
    5 pts

    Может быть кому понадобиться – у меня немного другой код для изменения Text Font в проекте (IN[0] – название стиля):

    import clr
    clr.AddReference('RevitAPI')
    from Autodesk.Revit.DB import *
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    from System.Collections.Generic import *
    
    doc = DocumentManager.Instance.CurrentDBDocument
    
    ElementTypes = FilteredElementCollector(doc).OfClass(ElementType).ToElements()
    
    TransactionManager.Instance.EnsureInTransaction(doc)
    for i in ElementTypes:
    	for j in i.Parameters:
    		if j.Definition.Name == "Text Font":
    			i.LookupParameter("Text Font").Set(IN[0])
    TransactionManager.Instance.TransactionTaskDone()
    
    #6699 Score: 0

    txt
    Модератор
    90 pts

    Denis,

    спасибо за решение

    твой код изменяет в проекте шрифт текста для текстовых примечаний и размерного текста в том числе )

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

     

    #6704 Score: 0

    Denis
    Участник
    5 pts

    На данный момент есть продвижение, проблема с редактором смейств. Надеюсь в ближайшие дни выложу решение. В любом случае отпишусь в данной теме)

    #6707 Score: 2

    Denis
    Участник
    5 pts

    Попробовал изменить Text Font у элементов внутри семейств, но не получилось. Скрипт меняет параметры, но не получается перезаписать семейства, в которых произведены изменения.

    Код:

    import clr
    clr.AddReference("RevitNodes")
    import Revit
    clr.ImportExtensions(Revit.Elements)
    # Import DocumentManager and TransactionManager
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    doc = DocumentManager.Instance.CurrentDBDocument
    
    # Import RevitAPI
    clr.AddReference("RevitAPI")
    import Autodesk
    from Autodesk.Revit.DB import *
    import System
    
    clr.AddReference('RevitAPIUI')
    from Autodesk.Revit.UI import *
    
    import sys
    pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
    sys.path.append(pyt_path)
    
    class FamilyOption(IFamilyLoadOptions):
    	def OnFamilyFound(self,familyInUse,overwriteParameterValues):
    		overwriteParameterValues = True
    		return True
    		
    	def OnSharedFamilyFound(self, sharedFamily, familyInUse, FamilySource, overwriteParameterValues):
    		overwriteParameterValues = True
    		return True
    
    NameOfType = IN[0]
    result = []
    def setWhatYouNeed(d, s):
    	TransactionManager.Instance.ForceCloseTransaction()
    	familyDoc = doc.EditFamily(s)
    #	owner = familyDoc.OwnerFamily
    	ElementTypes = FilteredElementCollector(d).OfClass(ElementType).ToElements()
    	TransactionManager.Instance.EnsureInTransaction(d)
    	for i in ElementTypes:
    		for j in i.Parameters:
    			if j.Definition.Name == "Text Font":
    				i.LookupParameter("Text Font").Set(IN[0])
    				result.append(i.LookupParameter("Text Font").AsString())
    	TransactionManager.Instance.TransactionTaskDone()
    	TransactionManager.Instance.ForceCloseTransaction()
    	familyDoc.LoadFamily(doc, FamilyOption())
    	familyDoc.Close(False)
    
    for symbol in IN[1]:
    	setWhatYouNeed(UnwrapElement(symbol).Symbol.Family.Document, UnwrapElement(symbol).Symbol.Family)
    
    OUT = result

    Сам скрипт:

    P.S. Буду рад помощи, если у кого-то есть идеи давайте обсуждать)

    #6740 Score: 0

    txt
    Модератор
    90 pts

    пытался применить скрипт выше к маркам пространств (необходимо получить из них familyInstanse ? но у этих марок их получается нет?) в чем ошибка?

    #6748 Score: 0

    Denis
    Участник
    5 pts

    Судя по ошибке и логике:
    Space Tag Type – это сам Type. Тебе нужно убрать “.Symbol” в s и d.
    Т.е.:
    setWhatYouNeed(UnwrapElement(symbol).Family.Document, UnwrapElement(symbol).Family)

    #6749 Score: 0

    txt
    Модератор
    90 pts

    не вышло:

    #6750 Score: 0

    Denis
    Участник
    5 pts
    import clr
    clr.AddReference('RevitAPI')
    from Autodesk.Revit.DB import *
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    from System.Collections.Generic import *
    doc = DocumentManager.Instance.CurrentDBDocument
    
    SpaceTag = FilteredElementCollector(doc).OfClass(SpaceTag).ToElements()
    
    TransactionManager.Instance.EnsureInTransaction(doc)
    for i in SpaceTag:
    	for j in i.Parameters:
    		if j.Definition.Name == "Choose your parameter":
    			i.LookupParameter("Choose your parameter").Set(IN[0])
    TransactionManager.Instance.TransactionTaskDone()

    Найди свой параметер и замени им в коде “Choose your parameter”. Если Text Font, то “Text Font”, как и в примере выше.

    #6751 Score: 0

    txt
    Модератор
    90 pts

    в целях уведомления спешу всех нас обрадовать что решение все таки нашлось на заграничном форуме:

    https://forum.dynamobim.com/t/change-parameter-of-elements-into-family/14695/16

     

     

Просмотр 11 сообщений - с 16 по 26 (из 26 всего)

Для ответа в этой теме необходимо авторизоваться.