Как подровнять круглый воздуховод?

Автор Тема: Как подровнять круглый воздуховод?  (Прочитано 3927 раз)

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

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

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


VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
А в чём, собственно, трудности? На каком этапе споткнулся?

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

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
чтобы подвинуть воздуховод нужно матрицу трансформации применять или можно как-то по-другому, что-то я не понимаю механику общую )
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Не, всё проще  :) Посмотри класс ElementTransformUtils, там есть методы MoveElement и MoveElements. Там у тебя дальше могут возникнуть нюансы, потому что работаешь с системой MEP и у тебя могут двигаться и/или изменяться связанные.

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

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
ок. спасибо...
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Вернусь к разговору. Накидал кодик:
 
Код - C# [Выбрать]
  1.                Duct duct = selobject is Duct ? duct = selobject as Duct : duct = null;
  2.  
  3.                 if (duct != null)
  4.                 {
  5.                     LocationCurve ductcurve = duct.Location as LocationCurve;
  6.  
  7.                     Curve curve = ductcurve.Curve;
  8.  
  9.                     Line line = (Line)curve;
  10.  
  11.                     XYZ oldPlace = line.Origin;
  12.  
  13.                     double _Z = {новая отметка воздуховода} + oldPlace.Z;
  14.  
  15.                     XYZ newPlace = new XYZ(oldPlace.X, oldPlace.Y, _Z);
  16.  
  17.                     ElementTransformUtils.MoveElement(doc, duct.Id, newPlace);
  18.                 }

вроде так... // не забываем про конвертацию единиц

а воздуховод куда-то улетает :) . думал забыл про отметку этажа, но он по X и Y улетает...
« Последнее редактирование: 11-08-2021, 13:45:59 от Agens »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Agens,
Я конечно могу ошибаться, но последний параметр в ElementTransformUtils.MoveElement - это вектор перемещения, а не новое положение. Так что тебе нужно:
Код - C# [Выбрать]
  1. XYZ newPlace = new XYZ(0, 0, {новая отметка воздуховода} - oldPlace.Z);
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Александр прав.

Альтернативно, ты  можешь присвоить новое значение ductcurve.Curve.

При обоих способах нужно смотреть, что получается в итоге, т.к. воздуховоды в системе, а не существуют по-отдельности, как оно будет вести себя в рамках твоей задачи, возможно, придётся добавить какие проверки

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

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
про вектор понял, спасибо,
а вот как вернуть Curve обратно в Duct не разобрался, там вроде только метод get есть, или строить новый воздуховод, а это удалять...
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc

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

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Как подровнять круглый воздуховод?
« Ответ #10 : 17-08-2021, 10:14:41 »
спс, что-то я не туда посмотрел...
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020