Revit 2019. Делаем макрос для получения размеров пластин
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > Revit 2019. Делаем макрос для получения размеров пластин

Revit 2019. Делаем макрос для получения размеров пластин

Ответ
Поиск в этой теме
Непрочитано 23.04.2018, 19:41 1 | #1
Revit 2019. Делаем макрос для получения размеров пластин
YarUnderoaker
 
Негропроект, инженегр-конструктор
 
Черкассы
Регистрация: 16.02.2008
Сообщений: 903

Как известно новый тип элементов в Revit 2019 - плистины, не имеет размеров кроме толщины.
Для того что-бы получить размеры минимального паралелепипеда в котрый вписана пластина надо имея солид пластины найти object oriented bounding box.
У меня пока не установлен Ревит 2019, поэтому желающим быстрее начать работать с новым функционалом предланаю код
Клас для получения OOBB

Код:
[Выделить все]
    class OOBB
    {
    	static XYZ Min(XYZ a, XYZ b)
    	{
    		double x, y, z;
    		if (a.X < b.X) { x = a.X; } else { x = b.X; }
    		if (a.Y < b.Y) { y = a.Y; } else { y = b.Y; }
    		if (a.Z < b.Z) { z = a.Z; } else { z = b.Z; }
    		return new XYZ(x, y, z);
    	}
    	
     	static XYZ Max(XYZ a, XYZ b)
    	{
    		double x, y, z;
    		if (a.X > b.X) { x = a.X; } else { x = b.X; }
    		if (a.Y > b.Y) { y = a.Y; } else { y = b.Y; }
    		if (a.Z > b.Z) { z = a.Z; } else { z = b.Z; }
    		return new XYZ(x, y, z);
    	}
     	
    	public static BoundingBoxXYZ GetOOBB(Element source)
    	{
			Autodesk.Revit.DB.Options options = new Options();
			GeometryElement geo = source.get_Geometry(options);        	
			if (geo == null) return null;
			
			IList<Solid> solids = new List<Solid>();
			foreach(GeometryObject obj in geo)
            {
            	Solid solid = obj as Solid;
            	if (solid != null) solids.Add(solid);
			}
			
			if (solids.Count == 0) return null;			
			
		    IList<XYZ> vertices = new List<XYZ>();
		    IList<PlanarFace> faces = new List<PlanarFace>();
		    
		    BoundingBoxXYZ AABB = new BoundingBoxXYZ();
				    
    		foreach(Solid sld in solids)
    		{
    			
    			foreach(Face face in sld.Faces)
    			{
    				// filter only planar faces
    				if (face is PlanarFace) { faces.Add(face as PlanarFace); }
    				
				    Mesh mesh = face.Triangulate();
				    
				    for (int i = 0; i < mesh.NumTriangles; i++)
				    {
				        MeshTriangle triangle = mesh.get_Triangle(i);
				        XYZ p = triangle.get_Vertex(0); vertices.Add(p);
				        XYZ q = triangle.get_Vertex(1); vertices.Add(q);
				        XYZ r = triangle.get_Vertex(2); vertices.Add(r);
				        
				        AABB.Min = Min(AABB.Min, p); AABB.Max = Max(AABB.Max, p);
				        AABB.Min = Min(AABB.Min, q); AABB.Max = Max(AABB.Max, q);
				        AABB.Min = Min(AABB.Min, r); AABB.Max = Max(AABB.Max, r);
				    }
    			}
    		}
    		
    		faces.OrderByDescending( f => f.Area );
    		
	
			BoundingBoxXYZ minBB = new BoundingBoxXYZ();
			
			int count = 0;
			XYZ sizes = AABB.Max - AABB.Min;
			double volume = sizes.X * sizes.Y * sizes.Z;
			bool lessAABB = false;
			
			foreach(Face face in faces)
			{
				// Some optimization
				if (count > 24) break;
				count++;
				
				Transform tf = face.ComputeDerivatives(new UV()).Inverse;
				
				BoundingBoxXYZ bb = new BoundingBoxXYZ();
				bb.Min = new XYZ(1e10, 1e10, 1e10);
				bb.Max = new XYZ(-1e10, -1e10, -1e10);
				
				foreach(XYZ v in vertices)
				{
					XYZ tv = tf.OfPoint(v);
					bb.Min = Min(bb.Min, tv); 
					bb.Max = Max(bb.Max, tv);
				}
				
				XYZ sizes_ = bb.Max - bb.Min;
				double volume_ = sizes_.X * sizes_.Y * sizes_.Z;
				
				if (volume_ < volume) 
				{
					volume = volume_;
					minBB = bb;
					lessAABB = true;
				}
			}
    	
			if (lessAABB) { return minBB; } else { return AABB; }
    	}
    }
Пример использования
Код:
[Выделить все]
        private XYZ GetSizes(BoundingBoxXYZ bb)
        {
                        double x = bb.Max.X - bb.Min.X;
 	 		double y = bb.Max.Y - bb.Min.Y;
 	 		double z = bb.Max.Z - bb.Min.Z;
 	 		double e;
 	 		if (z > y) { e = z; z = y; y = e;}
 	 		if (y > x) { e = y; y = x; x = e;}
 	 		if (z > y) { e = z; z = y; y = e;}
 	 		return new XYZ(x, y, z);
        }
//-----------------------------------------------------------------------------
        BoundingBoxXYZ bb = OOBB.GetOOBB( plate);
     
         XYZ sizes = GetSizes(bb);
         double thikness = Math.Round( UnitUtils.Convert(sizes.Z, DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES, DisplayUnitType.DUT_MILLIMETERS) );
         double width = Math.Round( UnitUtils.Convert(sizes.Y, DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES, DisplayUnitType.DUT_MILLIMETERS) );
         double length = Math.Round( UnitUtils.Convert(sizes.X, DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES, DisplayUnitType.DUT_MILLIMETERS) );
Просмотров: 41798
 
Непрочитано 24.04.2018, 03:59
#2
erednimras

конструктор
 
Регистрация: 14.06.2010
Ukraine, Lemberg
Сообщений: 25
<phrase 1=


А можно поподробнее ,куда этот код вставлять - если в динамо phyton script то через какие параметры?

Последний раз редактировалось erednimras, 24.04.2018 в 04:21.
erednimras вне форума  
 
Непрочитано 24.04.2018, 06:23
#3
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


В МКЭ среди жесткостных характеристик тоже нет размеров пластин, а толщина есть.
Setvar вне форума  
 
Непрочитано 24.04.2018, 06:40
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от Setvar Посмотреть сообщение
В МКЭ среди жесткостных характеристик тоже нет размеров пластин, а толщина есть.
А причем тут МКЭ? В Ревит 2019 появился встроенный МКЭ решатель?
Boxa вне форума  
 
Непрочитано 24.04.2018, 07:09
#5
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


Цитата:
Сообщение от Boxa Посмотреть сообщение
В Ревит 2019 появился встроенный МКЭ решатель?
Не знаю. Тему же о нововведениях в Revit 2019 прикрыли. Возможно, самому Revit,у и не нужны предопределенные размеры пластин, они, возможно, определяются автоматически в модели. Вот в AutoCAD'е вообще нет никаких доступных через палитру свойств 3D-тел (например, полученных при экспорте из Revit в AutoCAD) и приходится их определять через boundary box...
Setvar вне форума  
 
Автор темы   Непрочитано 24.04.2018, 08:37
#6
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Цитата:
Сообщение от erednimras Посмотреть сообщение
А можно поподробнее ,куда этот код вставлять - если в динамо phyton script то через какие параметры?
Это кусок кода, что бы легче было написать свой макрос на С#.
Мне динамо как-то не зашел, но думаю, это там тоже пригодится.
YarUnderoaker вне форума  
 
Непрочитано 24.04.2018, 11:28
#7
extraneous

Не верблюд
 
Регистрация: 07.06.2010
Москва
Сообщений: 1,179


YarUnderoaker, глянь еще вот эту тему, если не сложно
__________________
Мой блог по Revit
extraneous вне форума  
 
Автор темы   Непрочитано 24.04.2018, 12:44
#8
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Смотрел, но пока посоветовать ничего не могу. Надо эксперементировать.

Нельзя ли все пластины проекта получить фильтром категории или класса?

Кстати из солида можно понять к какой категории его элемент соответствует
Код:
[Выделить все]
                foreach(Solid sld in solids)
                {
                	GraphicsStyle gStyle = doc.GetElement(sld.GraphicsStyleId) as GraphicsStyle;
                	if (gStyle.GraphicsStyleCategory.Id.IntegerValue == (int)BuiltInCategory.OST_StructConnectionPlates) 
                	{

                	}
                }
YarUnderoaker вне форума  
 
Непрочитано 24.04.2018, 12:56
#9
extraneous

Не верблюд
 
Регистрация: 07.06.2010
Москва
Сообщений: 1,179


YarUnderoaker, нет, коллектор собирает только Element, а эти пластины - Subelement, он наследован напрямую от Object.
Получить категорию из солида - идея!

Код по получение размеров пластины потестирую, спасибо.
__________________
Мой блог по Revit
extraneous вне форума  
 
Непрочитано 24.04.2018, 14:38
#10
румата


 
Регистрация: 06.04.2015
Сообщений: 2,748


Интересно. А каким образом создается пластина в Revit 2019? Вручную к примеру. Я не знаток API Revit, но если пластина была создана, к примеру через эскиз, то значительно разумнее было бы программно искать этот самый эскиз на основании которого была создана пластина, а не солид полученный в итоге.
румата вне форума  
 
Автор темы   Непрочитано 24.04.2018, 15:37
#11
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Насколько я знаю доступа к эскизным линиям к элементам типа перекрытие, крыша через API нет, наверное и к пластине нет.
YarUnderoaker вне форума  
 
Непрочитано 24.04.2018, 16:00
#12
h5r32


 
Регистрация: 28.12.2011
СПб
Сообщений: 843


А как же тогда работает пример AreaReinforcement из sdk. Армируют же перекрытия и стены любой формы.
h5r32 вне форума  
 
Непрочитано 24.04.2018, 16:10
#13
румата


 
Регистрация: 06.04.2015
Сообщений: 2,748


Цитата:
Сообщение от YarUnderoaker Посмотреть сообщение
Насколько я знаю доступа к эскизным линиям к элементам типа перекрытие, крыша через API нет, наверное и к пластине нет.
Странно это все. Получается вручную можно получить доступ к эскизу плиты, а через API нельзя. Тогда совершенно не понятно для чего нужен такой API.
румата вне форума  
 
Автор темы   Непрочитано 24.04.2018, 20:06
#14
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Можно создать новый объект из набора линий, но отредактировать существующий нельзя (хотя есть недокументированый хак).
YarUnderoaker вне форума  
 
Непрочитано 25.04.2018, 03:52
#15
erednimras

конструктор
 
Регистрация: 14.06.2010
Ukraine, Lemberg
Сообщений: 25
<phrase 1=


Спасибо Александру, он написал макрос который считает объём и массу пластин, даже тех которые входят в динамический узел (его можно взорвать). Посмотреть можно здесь. После тестирования можно сказать что:
1. После каждого изменения в геометрии нужно заходить в вкладку макрос и выполнять его вручную.
2. Макрос иногда глючит и выдает ошибку отказываясь пересчитывать последние изменения. Для нормального пересчета нужно сменить геометрию любой пластины, или поменять количество отверстий - потом поменять назад
3. Учитывается точный объём с учетом отверстий обычных и тех которые делают болты.
4. Пластины могут быть с любого материала - стекло, медь, дерево, но если в материале не заданы физические свойства, то есть нет плотности- макрос выдает ошибку.

также возникли проблемы при попытке перенести макрос в другой файл - ругается что Имя типа или пространства имен "AdvanceSteel" отсутствует в пространстве имен "Autodesk" (пропущена ссылка на сборку?)(CS0234)
erednimras вне форума  
 
Непрочитано 25.04.2018, 10:56
#16
Egorex


 
Регистрация: 25.09.2009
Сообщений: 169


Ребят, вы меня извините, я Revit 2019 еще не смотрел, но ваш ажиотаж относительно расчетов и выводов каких то параметров пластин мне совершенно непонятен.

В приложении семейство доски, фанеры для сборки опалубочного щита, и собственно сам опалубочный щит, категория "Генеральный план", сделано в версии 2016. Все обсуждаемые вами параметры получаются с помощью "параметров для отчетов". Не знаю, что там в 2019 намутили, могу только предположить, что соединения узлов стало делать еще проще.
Вложения
Тип файла: rar Семейства.rar (937.6 Кб, 176 просмотров)
Egorex вне форума  
 
Непрочитано 25.04.2018, 11:56
#17
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Цитата:
Сообщение от Egorex Посмотреть сообщение
Ребят, вы меня извините, я Revit 2019 еще не смотрел, но ваш ажиотаж относительно расчетов и выводов каких то параметров пластин мне совершенно непонятен.

В приложении семейство доски, фанеры для сборки опалубочного щита, и собственно сам опалубочный щит, категория "Генеральный план", сделано в версии 2016. Все обсуждаемые вами параметры получаются с помощью "параметров для отчетов". Не знаю, что там в 2019 намутили, могу только предположить, что соединения узлов стало делать еще проще.

Вся суть проблемы в том что в узлах металлоконструкций уже нет отдельных семейств. Пластины рисуются прямо в программе, не открывая отдельного семейства, по типу как вы рисуете перекрытие или фундаментную плиту. И вот автодеск пошутил над всеми конструкторами сделав доступным только один параметр этого элемента, а именно толщину. Но для того чтоб посчитать спецификации этого мало. Добавить можно только глобальные параметры, но я уже пытался через них как то повлиять на эскиз пластины, не получилось.

Вот люди знакомые с программированием пытаются всякими окольными путями таки получить эти заветные длина-ширина , для того чтоб можно было все обсчитать в спецификациях.

П.С. Надеюсь в экстеншене что-то добавят или в патч-фиксе каком-то.
madragor вне форума  
 
Непрочитано 25.04.2018, 13:02
#18
Egorex


 
Регистрация: 25.09.2009
Сообщений: 169


Цитата:
Сообщение от madragor Посмотреть сообщение
Вот люди знакомые с программированием пытаются всякими окольными путями таки получить эти заветные длина-ширина , для того чтоб можно было все обсчитать в спецификациях.
А, ну ясно. Тогда обращаю ваше внимание что Dynamo является неотъемлемой частью Revit, и представляет собой достаточно простой (по крайней мере, для человека с высшим строительным образованием) инструмент визуального программирования. С помощью которого можно быстро получить все необходимые параметры и прописать их куда надо.
Egorex вне форума  
 
Непрочитано 25.04.2018, 13:54
| 1 #19
Nels

конструктор, строитель
 
Регистрация: 08.10.2006
Уфа
Сообщений: 651
<phrase 1=


Цитата:
Сообщение от Egorex Посмотреть сообщение
Тогда обращаю ваше внимание что Dynamo является неотъемлемой частью Revit
Вряд ли так уж быстро появятся ноды для динамо, с помощью которых можно будет определять размеры пластин и передавать их в общие параметры. Тут пока работают напрямую с API.
Nels вне форума  
 
Непрочитано 25.04.2018, 18:22
#20
miko2009

Инженер-конструктор
 
Регистрация: 13.10.2011
Москва
Сообщений: 2,359


Цитата:
Сообщение от YarUnderoaker Посмотреть сообщение
Насколько я знаю доступа к эскизным линиям к элементам типа перекрытие, крыша через API нет
Increase Size Decrease Size Нажмите для просмотра
https://www.youtube.com/watch?v=Lbe0MaeKZ44&t=392s3:35
Цитата:
Сообщение от Nels Посмотреть сообщение
Вряд ли так уж быстро появятся ноды для динамо, с помощью которых можно будет определять размеры пластин и передавать их в общие параметры. Тут пока работают напрямую с API.
DYnamo работает напрямую с API
miko2009 вне форума  
 
Автор темы   Непрочитано 27.04.2018, 08:53
#21
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


На идее станции появилась идея добавить пластинам площадь и вес, голосуем колеги, куму не лень Plate schedule with area and weight
YarUnderoaker вне форума  
 
Автор темы   Непрочитано 27.04.2018, 16:31
1 | #22
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Немного доработал макрос Александра, добавил ширину/длину
Миниатюры
Нажмите на изображение для увеличения
Название: Plastinki.png
Просмотров: 307
Размер:	34.0 Кб
ID:	201678  
Вложения
Тип файла: rvt Revit2019 plates weigth plus.rvt (908.0 Кб, 110 просмотров)
YarUnderoaker вне форума  
 
Непрочитано 02.05.2018, 17:52
#23
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Теперь бы привязать это к общим параметрам из шаблона Александра (Рзм.Длина, Рзм.Ширина, Рзм.Толщина) и тогда по идее уже можно будет засунуть их в спецификацию.
madragor вне форума  
 
Автор темы   Непрочитано 10.05.2018, 11:30
#24
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Делаю сейчас марку АБ на небольшой навес. Практика показала еще несколько проблем:
1) Пластинам в составе соединения нельзя задавать значения параметров и выделять через спецификацию. Нельзя менять значения параметров через метки.
2) У пластин в составе соединения нет параметром марка и изготовитель


Пришлось писать дополнительный код что-бы пронумеровать пластины (для этого их надо отсортировать по размерам).
Что-бы задать группу конструктивных элементов для спецификации металопроката надо табом выделить отдельно каждую пластину и задать.
Взрывать соединения на составные тоже не хочется - вдруг потом надо будет что-то поменять.

В общем есть неудобства.
YarUnderoaker вне форума  
 
Непрочитано 30.05.2018, 11:04
#25
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Доброго дня YarUnderoaker
Пытаюсь использовать ваш макрос в другом документе, при сборке выдает 2 ошибки:

C:\ProgramData\Autodesk\Revit\Macros\2019\Revit\AppHookup\Plate\Source\Plate\ThisApplication.cs(161,11) : Ошибка CS0246: Не удалось найти имя типа или пространства имен "FilerObject" (пропущена директива using или ссылка на сборку?)
C:\ProgramData\Autodesk\Revit\Macros\2019\Revit\AppHookup\Plate\Source\Plate\ThisApplication.cs(205,10) : Ошибка CS0118: "Plate" является "пространство имен", но используется как "тип"

Так как ранее макросы никогда не писал , и к сожалению совсем не разбираюсь в программировании, прошу помочь мне решить эту проблему.

Макрос ваш просто скопировал. В принципе если делать сборку вашего макроса у меня на компьютере, то он тоже не собирается с теми же ошибками + добавляется 5 ошибок связанных с AdvanceSteel.
madragor вне форума  
 
Непрочитано 30.05.2018, 11:24
#26
h5r32


 
Регистрация: 28.12.2011
СПб
Сообщений: 843


madragor, Скопируй в новый документ все что у него в файле в самом верху сборки начинается с using
h5r32 вне форума  
 
Автор темы   Непрочитано 30.05.2018, 11:26
#27
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Для начала надо добавить ссылки на библиотеки


Для этого зайдите в Project->Add References -> .NET Assembly Browser -> Browse...


Добавить файлы dll с такими же названиями из папки
C:\Program Files\Autodesk\Revit 2019\AddIns\SteelConnections\

По ошибкам пока не понятно, возможно из-за отсутствия ссылок.
Миниатюры
Нажмите на изображение для увеличения
Название: References.png
Просмотров: 1038
Размер:	10.2 Кб
ID:	202901  Нажмите на изображение для увеличения
Название: References 2.png
Просмотров: 1022
Размер:	8.0 Кб
ID:	202902  
YarUnderoaker вне форума  
 
Автор темы   Непрочитано 30.05.2018, 12:30
#28
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Могу еще поделится более усовершенсвованым макросом уровня приложения
Распакуйте архив и закиньте в папку C:\ProgramData\Autodesk\Revit\Macros\2019\Revit\AppHookup

Но надо будет добавлять пластинам и каркасу параметры как в примере
Вложения
Тип файла: rar Primer.rar (9.18 Мб, 160 просмотров)
Тип файла: rar SteelSupp.rar (3.40 Мб, 162 просмотров)

Последний раз редактировалось YarUnderoaker, 16.08.2018 в 16:32.
YarUnderoaker вне форума  
 
Непрочитано 30.05.2018, 12:31
#29
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Огромное спасибо все получилось, действительно не хватало библиотек.

----- добавлено через ~5 ч. -----
Цитата:
Сообщение от YarUnderoaker Посмотреть сообщение
Могу еще поделится более усовершенсвованым макросом уровня приложения
Спасибо большое. Но как всегда у меня на компе есть ряд проблем .

Даже если я использую этот макрос в вашем примере у меня сначала запрашивает ЗД вид, кое как догадался что открыть надо ЗД конструктив . Далее оно выдает ошибку что у пластин нет необходимых общих параметров. Может я опять чего то не подключил ?
madragor вне форума  
 
Автор темы   Непрочитано 31.05.2018, 09:29
#30
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Извиняюсь не тот файл приложил, вот правильный
Вложения
Тип файла: rar Primer.rar (9.18 Мб, 111 просмотров)
YarUnderoaker вне форума  
 
Непрочитано 31.05.2018, 11:01
#31
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Доброе утро.
Спасибо все заработало. Кстати очень просто перегоняются общие параметры пластин - просто копирую "Параметры проекта" из вашего примера. И все макрос работает как надо
Еще раз большое спасибо!!!
madragor вне форума  
 
Автор темы   Непрочитано 31.05.2018, 12:18
#32
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Незачто. Приходится приспосабливаться к тому что нам дають разработчики.
Но все таки мне кажется есть толк от этих новшеств, можно немного упростить себе работу.
YarUnderoaker вне форума  
 
Непрочитано 31.05.2018, 13:14
#33
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Позволил себе немного изменить ваш макрос, приспособил его под шаблон Александра Зуева. Точно так же измененный макрос в архиве и файл примера .

Пример.rvt

SteelSupp.rar

Один вопрос остался непонятным - как то с помощью вашего макроса можно перенести параметр "Толщина" в общий параметр "Рзм.Толщина" ?
madragor вне форума  
 
Автор темы   Непрочитано 31.05.2018, 13:43
#34
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Добавить код, там где остальные такие параметры переносятся
Код:
[Выделить все]
 
if(param.Name == "Рзм.Толщина")
{
	DoubleParameterValue dpv = new DoubleParameterValue(pij.plate.Thickness/304.8);
	subelem.SetParameterValue(paramId, dpv);
}
YarUnderoaker вне форума  
 
Непрочитано 31.05.2018, 13:54
#35
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Пробовал, ругается при сборке.
madragor вне форума  
 
Автор темы   Непрочитано 31.05.2018, 14:25
#36
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


У меня не ругается. Значит где-то у вас косяк в синтаксисе. Бывает такое что скопировав с форума кусок кода он потом криво вставляется, попробуйте вручну написать.
YarUnderoaker вне форума  
 
Непрочитано 31.05.2018, 14:41
#37
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Скопировал данный вами код и все сработало. До этого брал в этом блоке за пример параметр "Ширина" корректировал его под "Толщину" и ругалось.
Спасибо за помощь.
madragor вне форума  
 
Непрочитано 04.06.2018, 15:28
#38
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Доброго дня. Опять у меня какая то ошибка. Вот такое вот сообщение выдает при попытке использовать макрос:
Нажмите на изображение для увеличения
Название: Сообщение об ошибке.jpg
Просмотров: 123
Размер:	54.4 Кб
ID:	203085

Пересобирать макрос пробовал все идет без ошибок. Единственное что заметил, так то что в самих пластинах поменялись местами кое-какие параметры. Подскажите в чем может быть проблема?
madragor вне форума  
 
Автор темы   Непрочитано 04.06.2018, 23:33
#39
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Ошибка такая бывает когда переменная не определена (null), а с ней пытаються что-то сделать. Но где это происходит не понятно. Надо делать пошаговую отладку, что бы найти точное место ошибки.
YarUnderoaker вне форума  
 
Непрочитано 05.06.2018, 09:35
#40
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Постараюсь описать как так получилось.
Работал с вашим макросом без проблем, ни каких ошибок не выдавало. Потом сделал в одном узле колонне "Укоротить", выставил угол необходимого среза и хотел на ту плоскость прилепить пластину. Прилепил, после этого начало выдавать вот эту ошибку. Также в параметрах экземпляра пластин в графе "Идентификация" появились стандартные параметры: "Изображение", "Коментарии", "Марка"(ранее их не было, в пластинах которые были созданы до этого тоже нет). В графе "Материалы и отделка" подтянутый мной общий параметр "О_Материал" поменялся местами с стандартным "Материал несущих конструкций". Пластины которые были созданы до этого и добавлены в стандартные узлы остались без изменений, но если разорвать связь этих пластин с узлами они становятся как новые - добавляются стандартные параметры в графе "Идентификация" и меняются местами параметры материала. Если удалить все пластины с такими параметрами то макрос работает как всегда. Если есть хоть одна пластина с измененными параметрами, выдает вот ту ошибку. По факту вышло так - все что создавалось до момента обрезки колонны работает с вашим макросом, все что создавалось или изменялось после этого не работает.
Далее провожу эксперименты: Сделал новую пластину, вышло все так как описал выше - новые параметры и так далее - макрос не работает. Но когда добавил эту пластину в сборку с стандартным узлом параметры стали так как надо и макрос заработал. Я так понимаю что макрос не работает с пластинами которые не входят в сборки с узлами или узлы?
madragor вне форума  
 
Автор темы   Непрочитано 05.06.2018, 10:24
#41
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


С отдельными пластинами не входящими в узлы работает (в том же примере есть такие). Но может случиласть какая-то нестандартная ситуация, все эти узлы, чесно говоря, сделаны через одно место - кусок кода эдванс стила прикрутили к ревиту.
Давайте какой-нибудь файл для теста, попробую решить проблему.
YarUnderoaker вне форума  
 
Непрочитано 05.06.2018, 11:18
#42
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


https://drive.google.com/open?id=1AI...szjMI0QR9yvdlI - Ссылка на файл с Которым работал, уменьшил размер как мог, ниже 13,4 МБ так и не смог уменьшить, потому ссылка и на гугл драйв
https://drive.google.com/open?id=1a_...KDCvaHhPMh8oMb - Ссылка на мой измененный макрос.
madragor вне форума  
 
Непрочитано 05.06.2018, 17:25
#43
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Хотел спросить про один забавный момент. В прикрепленных 2 картинки, узел в 3Д, и тот же узел в 2Д, на том что в 2Д почему то связи из трубы не обрезались по узлу крепления к фасонке. Это такой баг?
Нажмите на изображение для увеличения
Название: 3D.png
Просмотров: 208
Размер:	34.3 Кб
ID:	203138 Нажмите на изображение для увеличения
Название: 2D.png
Просмотров: 209
Размер:	28.7 Кб
ID:	203139
madragor вне форума  
 
Непрочитано 05.06.2018, 21:16
#44
Nels

конструктор, строитель
 
Регистрация: 08.10.2006
Уфа
Сообщений: 651
<phrase 1=


Возможно надо проверить линии (сплошную и пунктир) в семействе трубы. Их блокировку на торец 3д тела. Возможно линии привязаны к плоскости и не укоротились вслед за торцом трубы.
Nels вне форума  
 
Автор темы   Непрочитано 05.06.2018, 23:20
#45
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Тут ошибка в имени параметра pij.proxy.LookupParameter("Мрк.МаркаКонструкций").Set(pij.number.ToString());

Желательно взять в перехват ошибок

Код:
[Выделить все]
 
						try 
						{
							pij.proxy.LookupParameter("Мрк.МаркаКонструкции").Set(pij.number.ToString());
							continue;
						}
						catch (Exception)	
						{
							t.RollBack();
							MessageBox.Show("У пластин отсутсвует параметр Мрк.МаркаКонструкции");
							return;
						}
YarUnderoaker вне форума  
 
Непрочитано 06.06.2018, 09:13
#46
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Цитата:
Сообщение от YarUnderoaker Посмотреть сообщение
Желательно взять в перехват ошибок
Вот с этого места по подробнее.
Я уже разобрался как добавить в этот макрос внесение целого числа в нужные мне параметры. Могли бы вы мне подсказать как можно назначить материал в нужном мне параметре?
Программирование начинает интересовать

Спасибо что нашли ошибку, все работает.

Последний раз редактировалось madragor, 06.06.2018 в 09:23.
madragor вне форума  
 
Непрочитано 06.06.2018, 09:21
#47
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Цитата:
Сообщение от Nels Посмотреть сообщение
Возможно надо проверить линии (сплошную и пунктир) в семействе трубы. Их блокировку на торец 3д тела. Возможно линии привязаны к плоскости и не укоротились вслед за торцом трубы.
Не нашел таких данных. Единственное что может подходить это "модификаторы" в "Соединениях несущих конструкций" но они у меня включены. Да и есть на одном плане , где одна связь приходит нормально, а вторая так же заходит, прогоны не доходят до узла.

Нажмите на изображение для увеличения
Название: 2D.1.png
Просмотров: 102
Размер:	9.8 Кб
ID:	203160

Это все тот же узел только сделан из плана, и главная балка с связями просто под углом к плоскости вида.

Проблему обнаружил. В самом семействе были добавлены линии для отображения граней и скрытых граней. Они не обрезались узлом. Удалил все стало на свои места правда исчезли скрытые грани.

Последний раз редактировалось madragor, 06.06.2018 в 10:05.
madragor вне форума  
 
Автор темы   Непрочитано 08.06.2018, 15:51
#48
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Цитата:
Сообщение от madragor Посмотреть сообщение
Могли бы вы мне подсказать как можно назначить материал в нужном мне параметре?
Вот для примера код для изменения параметра типа материал
Код:
[Выделить все]
 
public void SetMaterialParam()
{
	RVTDocument doc = this.ActiveUIDocument.Document;
    FilteredElementCollector collector = new FilteredElementCollector(doc);
    IEnumerable<Material> collection = collector.OfClass(typeof(Material)).OfType<Material>();
    
    ICollection<ElementId> elementSet = this.ActiveUIDocument.Selection.GetElementIds();    

	using(RVTransaction t = new RVTransaction(doc))
	{		    
		t.Start("Set material");
			
        foreach(Material mtr in collection)
        {
        	if (string.Compare(mtr.Name, "Металл") == 0)
        	{
        		foreach(ElementId id in elementSet)
        		{
        			FamilyInstance fi = doc.GetElement(id) as FamilyInstance;
        			if (fi == null) continue;
        			
        			Parameter p = fi.get_Parameter(BuiltInParameter.STRUCTURAL_MATERIAL_PARAM);
        			if (p != null) { p.Set(mtr.Id); }
        		}
        		
        		t.Commit();
        		return;
        	}
        }
        
        t.RollBack();
    
	}

}
Описание в кратце - из всех материалов проекта выбираем с именем "Металл" и назначаем выбраным элементам если у них есть системный параметр "Материал конструкции"
YarUnderoaker вне форума  
 
Непрочитано 11.06.2018, 14:41
#49
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Спасибо большое за помощь. Постараюсь разобраться .
madragor вне форума  
 
Непрочитано 06.07.2018, 11:34
#50
Nels

конструктор, строитель
 
Регистрация: 08.10.2006
Уфа
Сообщений: 651
<phrase 1=


Цитата:
Сообщение от madragor Посмотреть сообщение
Проблему обнаружил. В самом семействе были добавлены линии для отображения граней и скрытых граней. Они не обрезались узлом. Удалил все стало на свои места правда исчезли скрытые грани.
Я про эти линии и говорил. Только скорее всего их не стоило удалять, надо было только концы линий привязать к торцам 3D тела.
Nels вне форума  
 
Непрочитано 06.07.2018, 11:59
#51
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Они были привязаны к торцам. Проблему невидимых граней решил тем что пользуюсь командой "показать невидимые линии". Так что особых проблем не обнаружил, все невидимые грани отображаются, правда только на средней детализации.
madragor вне форума  
 
Непрочитано 09.08.2018, 16:41
#52
m.Mitya


 
Регистрация: 09.08.2018
Сообщений: 1


Добрый день! Масса отдельной пластины и в составе соединения макросом подсчитывается по разному(в составе соединения не верная). Это возможно исправить?
m.Mitya вне форума  
 
Автор темы   Непрочитано 16.08.2018, 10:43
#53
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


Можно, но надо понять почему так происходит.
Еще есть отдельная проблема - масса считается по объему, а в объеме учитываются отверстия.

....

В коде надо подправить одну константу, в строке

double vol = pl.Volume / (1000000 * 29.504);

заменить на

double vol = pl.Volume / (1000000 * 28.317);

----- добавлено через ~27 мин. -----
Обновил архив в посте 28.
Заменил константу и добавил проверку материала на наличие физических параметров.

Последний раз редактировалось YarUnderoaker, 16.08.2018 в 16:09. Причина: добавлено
YarUnderoaker вне форума  
 
Автор темы   Непрочитано 12.04.2019, 15:25
#54
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 903


И так, в Ревите 2020 у пластин теперь есть дополнительные параметры: длина, ширина, вес, площадь, площадь покрытия, точный вес (с вычитом отверстий).
YarUnderoaker вне форума  
 
Непрочитано 15.04.2019, 14:02
#55
DMSskop


 
Регистрация: 23.01.2019
Сообщений: 132


А нормальной ведомости элементов и технической спецификации метала не появилось? 🐱*👓
DMSskop вне форума  
 
Непрочитано 19.04.2019, 13:50
#56
madragor

инженер-конструктор
 
Регистрация: 06.07.2012
Киев
Сообщений: 69


Вообщем потыкал узлы. Все печальнее чем в 19.
Да добавили нужные параметры и массу вы можете в легкую получить как черновую так и фактическую. НО!!!!! Я не знаю какому "гению" пришла замечательная идея запретить редактирование общих параметров у подчиненных элементов узлов, но он это сделал. По факту: если вы создаете просто пластину вы можете менять общие параметры, если брать относительно шаблона А. Зуева, то такие параметры как О_Обозначение, О_Наименование и т.д, но как только вы сделали узел, или вставили шаблонный узел, все пластины и профили не редактируются. Это напрочь убило возможность сделать хоть какую-то спецификацию, так как нам в ней нужны не только масса и количество но и название и тип профиля или толщина пластины с условным обозначением. Теперь все это невозможно внести. А базовых параметров у пластины, куда бы это можно было вписать, просто НЕТ!!!

Последний раз редактировалось madragor, 19.04.2019 в 13:57.
madragor вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > Revit 2019. Делаем макрос для получения размеров пластин



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос VBA Excel для извлечения таблиц из линий, полилиний, текста из DWG файлов в Excel с помощью NanoCAD/AutoCAD JZY Готовые программы 8 14.07.2016 06:31
Использование Revit MEP для проектирования промышленных объектов. andr_g Revit 6 29.10.2015 20:59
Использование Revit Structure для конструирования мостов AlexYoung Revit 26 20.02.2012 20:21
Заменимость Revit Architecture Revit Structure'м cardinalus Revit 4 30.06.2011 10:58
Балки в Revit MEP. Revit и СПДС Минька Revit 1 25.04.2011 05:51