создание экземляров семейства на виде

Автор Тема: создание экземляров семейства на виде  (Прочитано 10410 раз)

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
Если говорить про Document то все в порядке:
Код - Python [Выбрать]
  1. for elem in elems4:
  2.     if elem.Family.Name == "Нужная деталь":
  3.         for i in range(0,5):
  4.             loc = XYZ(0,(i*dist),0)
  5.             familyInst = doc.Create.NewFamilyInstance(loc, elem, Structure.StructuralType.NonStructural)
  6.             print(loc)
как только пытаюсь заставить работать .NewFamilyInstance(Face, XYZ, XYZ, FamilySymbol) для отображение на виде, то никаких результатов:
Код - Python [Выбрать]
  1. for elem in elems4:
  2.     if elem.Family.Name == "Нужная деталь":
  3.         for i in range(0,5):
  4.             loc = XYZ(0,(i*dist),0)
  5.             refdir=XYZ(0,2,0)
  6.             familyInst = doc.Create.NewFamilyInstance(GeometryObject,loc,refdir,elem)
   

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
miko, а вопрос то в чем?
про Document то все в порядке
Что в порядке?
работать .NewFamilyInstance(Face, XYZ, XYZ, FamilySymbol) для отображение на виде
Данный метод предназначен для создания экземпляра семейства на поверхности элемента. С видом не связан никак.

В целом я не понял ни что вы делаете, ни что у вас не получается.

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
Что в порядке?
Inserts a new instance of a family into the document, using a location and a type/symbol. Вот это имел ввиду , в документ экземпляры попадают нормально.
Данный метод предназначен для создания экземпляра семейства на поверхности элемента. С видом не связан никак.
все , нужно бросать по ночам программировать, думал face это плоскость в которой находится элемент, и как я ночью не заметил NewFamilyInstance(XYZ, FamilySymbol, View) понятия не имею ........ вопрос отпадает )

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
вопрос отпадает )
Рад что помог:)

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
я либо немного не понимаю или автодеск сам запутался ?
 в SDK:
This overload applies only to 2D family symbols (detail components, annotation symbols, titleblocks, etc.).
в http://help.autodesk.com/view/RVT/2016/FRA/?guid=GUID-C7E4C845-C386-4B7B-BDA1-5D2BE7A5C2D8:
Generic Annotations
я 2 дня сижу с detail components а оно оказывается не поддерживается ?

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Данный метод применяется только для создания видозависимых элементов. 3D объекты являются видо-независимыми, поэтому для них этот метод не подойдет. И не имеет смысла.

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
3D объекты являются видо-независимыми, поэтому для них этот метод не подойдет. И не имеет смысла.
а кто про 3д говорит ?
в SDK документации данный метод поддерживает detail components (2д элемент) а в онлайн справке поддерживает только Generic Annotations.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
а в онлайн справке поддерживает только Generic Annotations.
Я бы это по другому интерпретировал. Generic Annotations можно создавать ТОЛЬКО с помощью метода NewFamilyInstance(XYZ, FamilySymbol, View)

Так что в целом надо пробовать. Если Revit выдает ошибку, то ее анализировать.

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
пишет "expected StructuralType,got type "
И у меня задача не вызывать объект из документа (загруженного семейства) а создавать нужно количество (в нужном месте) экземпляров нужного семейства.

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
miko,
напишите кусок кода сюда где пытаетесь вставить новый экземпляр. Естественно включая код, где идет определение всех параметров метода NewFamilyInstance

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
Код - Python [Выбрать]
  1. #связь с Revit и его параметрами API библиотек
  2. import clr
  3. clr.AddReference('RevitAPI')
  4. clr.AddReference('RevitAPIUI')
  5.  
  6. from Autodesk.Revit import *
  7. from Autodesk.Revit.UI import *
  8. from Autodesk.Revit.UI.Macros import *
  9. from Autodesk.Revit.UI.Selection import *
  10. from Autodesk.Revit.DB import *
  11. from System.Collections.Generic import *
  12. from System.Collections import *
  13. from System import *
  14. from math import *
  15.  
  16. app = __revit__.Application
  17. doc = __revit__.ActiveUIDocument.Document
  18.  
  19. t = Transaction(doc, 'family instances')
  20.  
  21. t.Start()
  22.  
  23. #начало кода--------------------------------------------------------------------------------------------------------------------------------------
  24.  
  25. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  26. collector4 = FilteredElementCollector(doc)
  27. #collector4.OfCategory(BuiltInCategory.OST_DetailComponents)
  28. collector4.OfCategory(BuiltInCategory.OST_GenericAnnotation)                    
  29. elems4 = collector4.OfClass(FamilySymbol).ToElements()
  30.  
  31. for elem in elems4:
  32.     if elem.Family.Name == "Деталь Д1":
  33.         for i in range(0,5):
  34.             loc = XYZ(0,0,0)
  35.             View=TableView
  36.             familyInst = doc.Create.NewFamilyInstance(loc, elem,View)
  37.             print(loc)

только тут мне не понятно на каком интервале они располагаются, нету параметра referenceDirection

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
А чему равно TableView?
loc всегда равно одному и тому же значению. Нужно использовать индекс цикла.  Что то вроде loc = XYZ(i,0,0)

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
А чему равно TableView?
честно долго разбирался  , где то нашел человек задал так , подумал что это базовый класс хотя не нашел в документации его.
или View=Autodesk.Revit.DB.View ???
loc всегда равно одному и тому же значению. Нужно использовать индекс цикла.  Что то вроде loc = XYZ(i,0,0)
да если честно вводил индексацию , просто в попытках понять что не так упростил , а было :
loc = XYZ(0,(i*dist),0)

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
честно долго разбирался  , где то нашел человек задал так , подумал что это базовый класс хотя не нашел в документации его.
или View=Autodesk.Revit.DB.View
Выходит, что передаем в метод неизвестно что, получаем ошибку и недоумеваем, почему не получается:)
Думаю причина в том, что вызывается не метод NewFamilyInstance(XYZ, FamilySymbol, View), а какой-либо другой перегруженный метод, на основе типов передаваемых параметров. Так как переменная TableView нигде не объявлена, то результат не предсказуем.
Ошибка на этапе выполнения или компиляции?

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
ну у меня тоже догадки что он из за View путает его с NewFamilyInstance(XYZ, FamilySymbol, StructuralType), но тогда как задать вид ? :(
Ошибка на этапе выполнения или компиляции?
выполнения

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
но тогда как задать вид ?
Отвечу вопросом на вопрос. А в чем проблема? Либо текущий вид, либо получить конкретный вид с помощью FilteredElementCollector

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
проблема как объявить что текущий

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
View=Autodesk.Revit.DB.View
вот. сами же знаете как его получить:)

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
пробовал с ним уже не раз, но тогда ревит ругается что переменная Autodesk не задана )
хотя ссылка на библиотеку сверху есть на Autodesk.Revit.DB

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

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Пардон.. конечно же
Код - C# [Выбрать]
  1. View = __revit__.ActiveUIDocument.ActiveView

Отмечено как Решение miko 24-11-2015, 11:52:07

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

  • ADN OPEN
  • **
  • Сообщений: 55
  • Карма: 0
урааа :)
Код - Python [Выбрать]
  1. i=0
  2. for elem in elems4:
  3.     if elem.Family.Name == "Деталь Д1":
  4.         for i in range(0,rng):
  5.             loc = XYZ(i,0,0)
  6.             View = __revit__.ActiveUIDocument.ActiveView
  7.             familyInst = doc.Create.NewFamilyInstance(loc, elem,View)
  8.             i=i+1
  9.             print(loc)