@Vladimir, варианты решения могут быть разные, в зависимости от исходного списка точек. Узлы List.UniqueItems и Point.PruneDuplicates не сработают, потому что координаты не полностью совпадают (значение по Z разное). Можно например сгруппировать точки по значениям X или Y, и уже на основе этого списка создавать поверхность.
Если выложите список точек, будет проще подсказать решение, т.к. этот способ может не подойти.
На входе имею Empty List (допустим из приведённого нода Get Documents, если к файлу Ревита ничего не прилинковано).
В отчёт (вывожу в Excel, но сейчас это не суть важно) мне нужно отправить данные о линках или, если таковых нет, то список из “НЕТ” (собственно, из чего угодно и не обязательно список).
Чтобы я не делал, система игнорирует мои операции и на выходе упорно выдает Empty List.
К примеру, пытался применить String.Contains, потом List.ReplaceEmptyLists. Тщетно. Результат тот же.
К чему это приводит. В отчёт у меня идёт список из заголовков двух колонок и под ними список Name и Path. Если последние пустые, то Excel, увы, не записывает “Имя”, “Путь” (первая строка), “”, “” (вторая строка), а умудряется во вторую (пустую) строку продублировать заголовок или оба.
как я понимаю в методе Create Method (Document, IList(CurveLoop), XYZ, AreaLoadType) в IList(CurveLoop) надо на каждой итерации подавать отдельный ЛИСТ из линий ,образующих замкнутый контур ?
Решения пока не нашел, однако чтобы каждая нагрузка была отдельной (выделялась отдельно), то в транзакции надо записать так (не знаю, поможет ли вам и верно ли это) (без пробелов код):
TransactionManager.Instance.EnsureInTransaction(doc) lst=[[x] for x in curveLoopList]
for i in vecforc_list:
for k in i:
for j in lst:
a = AreaLoad.Create(doc, j, k, loadtype).ToDSType(False)
TransactionManager.Instance.TransactionTaskDone()
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
lst=[[-4,-8,-7.5],[-50,-200,-7.5]]
list=[[Point.ByCoordinates(0,0,x*304.8) for x in i ]for i in lst]
OUT = list
Вопрос в чате:
Возможно как то подобным образом через сортировку или иначе сгруппировать одинаковые элементы и сложить их значения (100+100, 200+200 ) исходный list=[[“Элемент 1”, 100] , [“Элемент 1”, 100], [“Элемент 2”, 200] ,[“Элемент 2”, 200]] а на выходе list_sort_sum=[[“Элемент 1”, 200] , [“Элемент 2”, 400]]
Ответ:
сначала складываем (через словарь), затем сортируем словарь