Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

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

Revit API. Как программно Копировать с детализацией вид?

Ответ
Поиск в этой теме
Непрочитано 07.02.2016, 16:58 #1
Revit API. Как программно Копировать с детализацией вид?
SNIIP
 
Регистрация: 04.05.2010
Сообщений: 338

Подскажите как в Revit программно скопировать вид с детализацией и разместить его на листе? (C#)
Просмотров: 5556
 
Непрочитано 08.02.2016, 11:45
1 | #2
YarUnderoaker

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


У видов есть метод Duplicate(ViewDuplicateOption.WithDetailing)

Разместить на лист

Код:
[Выделить все]
  
    BoundingBoxXYZ xyzLocation   = selectedView.get_BoundingBox(m_Doc.ActiveView );
 
    XYZ xyzPosition = ( xyzLocation.Max + xyzLocation.Min ) / 2.0;
 
    chosenSheet.AddView( correspondingView,  new UV( xyzPosition.X, xyzPosition.Y ) );
YarUnderoaker вне форума  
 
Автор темы   Непрочитано 08.02.2016, 21:01
#3
SNIIP


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


Я совершенно запутался)) нужна помощь (сразу скажу что это моя первая программ в ревите, сильно не ругайте)
попробую структурировать все вопросы:
1) Мне нужно задать пользователю вопрос: выберите вид (если он на листе то он типа VIewport как я понял)
пробую таким образом:

Код:
[Выделить все]
GetElement(uiApp.ActiveUIDocument.Selection.PickObject(ObjectType.Face,"выберите вид"))
а) можно ли таким образом вести диалог с пользоваетелм?
б) как тип Element преобразовать в тип VIewport?

2) по Viewport у ищу связанный с ним вид:
Код:
[Выделить все]
View myview;
myview = doc.GetElement(Viewport1.ViewId);
программа не запустилась но я думаю это единственная чать которая у меня получилась

3) копирую с детализацией вид :
myview.Duplicate(ViewDuplicateOption.WithDetailing); (это тоже освоил )

4) а вот и самое интресное... как мне теперь выбрать именно тот новый скопированный вид, и как его разместить именно на лист, который опять же хочу спросит у пользоваетля
(как спросить лист тоже не знаю... ведь лист как таковой нельзя выделить типа выберте лист... можно только что бы пользоваетль выбрал какой то сделал его активным а потом вставить в активный... так вот как прервать выполнени на время пока пользователь счелкает по листам и выбирает нужный ему лист? )
SNIIP вне форума  
 
Непрочитано 08.02.2016, 22:02
#4
YarUnderoaker

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


Для общения с пользователем есть MessageBox.Show() с разными наборами параметров. Для его использования добавте using System.Windows.Forms

Вообще желательно упростить себе задачу, вид выбрать перед запуском макроса и использовать ICollection<ElementId> elementSet = this.ActiveUIDocument.Selection.GetElementIds() для получения айдишек выбраного
Или сделать диалог с листбоксом для выбора выда из списка.

Последний раз редактировалось YarUnderoaker, 08.02.2016 в 22:07.
YarUnderoaker вне форума  
 
Автор темы   Непрочитано 09.02.2016, 10:20
#5
SNIIP


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


Не прошло и 5ти часов как получилась первая программа:
Код:
[Выделить все]
UIApplication uiApp = this.Application;
            Document doc = uiApp.ActiveUIDocument.Document;
           	Transaction trans = new Transaction(doc);
            trans.Start("Lab");
            
            Selection sel = uiApp.ActiveUIDocument.Selection;
            ICollection<ElementId> elementSet = sel.GetElementIds();
                       
            var elem1 = elementSet.First();
                      
            Viewport viewPort1;
            viewPort1=doc.GetElement(elem1) as Viewport;
                   
                     
            View view1;            
            view1=doc.GetElement(viewPort1.ViewId) as View;
            
            var newview = view1.Duplicate(ViewDuplicateOption.WithDetailing);          
                                   
            XYZ point;             
            point = new XYZ(0, 0, 0);	
                               
            Viewport.Create(doc, viewPort1.SheetId, newview ,  point);
            	
            trans.Commit();


Выбираем вид на листе.. и вуаля... в точке 0,0 вставляется копия такого же вида с детализацией) круто)))

что не получилось:
1) бился бился с get_BoundingBox но так ничего и не вышло.. ошибки ошибки ошибки..
Подскажите как на пример моей программы новый вид вставить на лист относительно старого со смещением? как вытащить координаты старого вида? того который копировал?


2) как скопировать таким же образом спецификацию? (решил вопрос сам, если нужно выложу)

3) Как скопировать вид не на текущий лист а например на другой (тут даже не знаю как лучше решить задачу, инетерсны ваши мнения.. например выбираешь вид.. тыкаешь макрос... программ спрашивает.. выберите лист.. ты такой выбираешь... и что нить жмешь...но получается что то не ладится... вобщем пока не придумал как решить)

4) Хмм.. еще с одной проблемой столкнулся... приложения писал ввиде макросов в стандартном редакторе. потом решил оформить ввиде кнопки... создал файл *.addin но запустить приложение не получается... пишет типа проблма с классом.
так у меня в программе только функции... как на них ссылку седлать?
проблема в этой строчке:

<FullClassName>PipeCreation.Command</FullClassName>

у меня так:

Код:
[Выделить все]
public partial class ThisDocument
	{
		private void Module_Startup(object sender, EventArgs e)
		{

		}

		private void Module_Shutdown(object sender, EventArgs e)
		{

		}

		#region Revit Macros generated code
		private void InternalStartup()
		{
			this.Startup += new System.EventHandler(Module_Startup);
			this.Shutdown += new System.EventHandler(Module_Shutdown);
		}
		#endregion
		public void KOPIROVANIE()
		{
                 ...........................
	        }
	}
}
как эта строчка будет выглядеть у меня?

Последний раз редактировалось SNIIP, 10.02.2016 в 05:59.
SNIIP вне форума  
 
Непрочитано 10.02.2016, 22:25
#6
YarUnderoaker

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


Копировать вид со сдвижкой
Код:
[Выделить все]
public void CopyView()
{
            Document doc = this.Document;
            Transaction trap = new Transaction(doc);
            trap.Start("Lab");
            
            ICollection<ElementId> eset = this.Selection.GetElementIds();

            ElementId eId = eset.First();
            
            Viewport vp = doc.GetElement(eId) as Viewport;
            
            View view = doc.GetElement(vp.ViewId) as View;
            
            View newview = doc.GetElement(view.Duplicate(ViewDuplicateOption.WithDetailing)) as View;

            BoundingBoxXYZ xyzLocation   = vp.get_BoundingBox(doc.ActiveView);
 
            XYZ xyzPosition = ( xyzLocation.Max + xyzLocation.Min ) / 2.0;
    		
            xyzPosition = xyzPosition + new XYZ(UnitUtils.Convert(10, DisplayUnitType.DUT_MILLIMETERS, DisplayUnitType.DUT_FEET_FRACTIONAL_INCHES) + (xyzLocation.Max - xyzLocation.Min).X, 0, 0);
 
            Viewport.Create(doc, vp.SheetId, newview.Id,  xyzPosition);
    		
            trap.Commit();
}
----- добавлено через ~7 мин. -----
Цитата:
Сообщение от SNIIP Посмотреть сообщение
создал файл *.addin но запустить приложение не получается
Приложение надо делать в Visual studio в виде библиотеки класов + файлик *.addin где прописан путь к библиотеке.
Этим можно заниматься когда у тебя сделан полностью отлаженый аддон, так как отладка через Visual studio медленное дело.
YarUnderoaker вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Revit API. Как программно Копировать с детализацией вид?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема выбора BIM 3D технологий для проектирования строительных конструкций (КМ и КЖ в одной среде). BIM pilgrim Прочее. Программное обеспечение 689 19.05.2018 09:40
Почему так непопулярен Ревит? Написатель Revit 1497 26.11.2014 09:59
Заменимость Revit Architecture Revit Structure'м cardinalus Revit 4 30.06.2011 10:58
Информация по идентификационным кодам программ в сетевых лицензиях Autodesk KSI AutoCAD 1 14.09.2009 15:59
Autodesk Revit Sett Revit 37 10.09.2009 11:41