Программирование (ObjectARX, ARX, .NET, LISP и др.)

Программирование (ObjectARX, ARX, .NET, LISP и др.)

Ответить
Moderator
kart1984
Сообщения: 134
Зарегистрированный: ‎06-05-2009
Сообщение 21 из 64 (664 просмотров)

Re: Revit API

08-17-2012 06:00 AM в ответ на: Sadykov

Это сделано для того чтобы избежать повторения стандартной нуммерации Ревит. Можно название Альбома делать невидимыми символами. Формула составления номера листа ревит Альбом.Номер листа. Можно попробовать вместе найти компромис. Еще как вариант создать марку с произвольным текстом. Чисто как обозначение и все

 

Активист сообщества
Active Member
otmoroz
Сообщения: 12
Зарегистрированный: ‎03-29-2012
Сообщение 22 из 64 (640 просмотров)

Re: Revit API

09-14-2012 02:00 PM в ответ на: kart1984

Артур, в начале темы Вы говорили, что пишите статью для чайников. Готова ли она?

Active Member
otmoroz
Сообщения: 12
Зарегистрированный: ‎03-29-2012
Сообщение 23 из 64 (617 просмотров)

Re: Revit API

10-06-2012 06:58 AM в ответ на: kart1984

С помощью какого метода создать линию детализации? В справке к SDK не нашёл 2012-я версия)

 

Что означает надпись "Overloaded" в описании некоторых методов?

 

Снимок.PNG

Moderator
kart1984
Сообщения: 134
Зарегистрированный: ‎06-05-2009
Сообщение 24 из 64 (607 просмотров)

Re: Revit API

10-07-2012 11:52 PM в ответ на: otmoroz

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

По поводу надписи Overloaded. Она означает что метод перегружен. То есть у него есть несколько вариантов вызова. Например:

Один и тот же метод GetElement в качестве данных может принимать как ElementId так и Reference. То есть у него два варианта написания. Или в классе DialogBox метод Show вообще имеет не только разные типы атрибутов но и разное их количество! Но задача у этих методов одинаковая.

Надеюсь объяснил понятно )))
С уважением, Артур.

Активист сообщества
Active Member
otmoroz
Сообщения: 12
Зарегистрированный: ‎03-29-2012
Сообщение 25 из 64 (599 просмотров)

Re: Revit API

10-08-2012 09:00 AM в ответ на: kart1984

Статью жду с нетерпением, очень мало информации на русском языке.

 

По поводу Overloaded пока ещё не до конца разобрался, наверное с практикой придёт понимание.

 

С линией детализации разобрался, оказалось всё просто )

Описание тут: http://blog.rodhowarth.com/2011/02/revit-api-how-to-draw-detail-line-on.html

Active Member
otmoroz
Сообщения: 12
Зарегистрированный: ‎03-29-2012
Сообщение 26 из 64 (588 просмотров)

Re: Revit API

[ Изменено ]
10-16-2012 12:37 AM в ответ на: otmoroz

Сделал линию детализации, но работает только в планах. На разрезах не хочет работать, вываливается с ошибкой.

 

 

Спойлер

using System;

using System.Collections.Generic;

using Autodesk.Revit.ApplicationServices;

using Autodesk.Revit.Attributes;

using Autodesk.Revit.DB;

using Autodesk.Revit.DB.Structure;

using Autodesk.Revit.UI;

 

namespace

Draw_Line

{

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]

[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]

publicclassDraw_Line: IExternalCommand

{

Application app;

Document doc;

public Result Execute(ExternalCommandData commandData, refstringmessage, ElementSet elements)

{

UIApplication rvtUIApp = commandData.Application;

UIDocument uiDoc = rvtUIApp.ActiveUIDocument;

app = rvtUIApp.Application;

doc = uiDoc.Document;

 

Draw_Annotation_Line();

returnResult.Succeeded;

}

publicvoidDraw_Annotation_Line()

{

doublex1 = 5.0;

 

doubley1 = 5.0;

 

doublez = 0.0;

 

doublex2 = 117.0;

 

doubley2 = 115.0;

XYZ point1 = app.Create.NewXYZ(x1, y1, z);

XYZ point2 = app.Create.NewXYZ(x2, y2, z);

Line line = app.Create.NewLineBound(point1, point2);

DetailCurve detailCurve = doc.Create.NewDetailCurve(doc.ActiveView, line);stringa = doc.ActiveView.Category.Name;

TaskDialog.Show("Done", "Line Created");

 

}

 

}

}

 

Moderator
kart1984
Сообщения: 134
Зарегистрированный: ‎06-05-2009
Сообщение 27 из 64 (576 просмотров)

Re: Revit API

10-16-2012 05:10 AM в ответ на: otmoroz

Все опорные точки в АПИ рисуются в 3Д пространстве. В связи с этим на разрезах используется координата z в зависимости от плоскости разреза x или y.

Активист сообщества
Active Member
otmoroz
Сообщения: 12
Зарегистрированный: ‎03-29-2012
Сообщение 28 из 64 (544 просмотров)

Re: Revit API

[ Изменено ]
10-22-2012 11:51 PM в ответ на: kart1984

Получилось разместить линию аннотации в плоскостях фасадов/разрезов с помощью задания координат точек, полученных из

doc.ActiveView.RightDirection и doc.ActiveView.UpDirection

Contributor
AAntonoff
Сообщения: 17
Зарегистрированный: ‎03-17-2013
Сообщение 29 из 64 (478 просмотров)

Re: Revit API

03-17-2013 02:32 AM в ответ на: kart1984

Добрый день! 

Пробую программировать на visual studio 2010 c# для Revit 2011. Возникла сложность объединения элементов  в линейный массив для их последующего копирования (аналог функции ревита). Для начала решил объединить в массив.

Код:

 

Спойлер
public Autodesk.Revit.UI.Result Execute(
       ExternalCommandData commandData,
       ref string message, 
       ElementSet elements)
{
       try
       {
          var uidoc = commandData.Application.ActiveUIDocument;
          var sel = doc.Selection.Elements;
          ElementArray e = sel as Element;
          ElementArray elementList = new ElementArray();
          elementList.Append(e);

       return Result.Succeeded;
       }
       catch (Exception ex)
       {
          return Result.Failed;
       }
}

 

 

Выдает следующие ошибки:

sel as Element - Cannot implicitly convert type 'Autodesk.Revit.DB.Element' to 'Autodesk.Revit.DB.ElementArray'

 

                          Cannot convert type 'Autodesk.Revit.UI.Selection.SelElementSet' to 'Autodesk.Revit.DB.Element' via

                          a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null

                          type conversion

 

 

elementList.Append(e) - The best overloaded method match for

                                        'Autodesk.Revit.DB.ElementArray.Append(Autodesk.Revit.DB.Element)' has some invalid

                                        arguments

 

                                        Argument '1': cannot convert from 'Autodesk.Revit.DB.ElementArray' to

                                        'Autodesk.Revit.DB.Element'

 

Помогите разобраться.

 

Moderator
kart1984
Сообщения: 134
Зарегистрированный: ‎06-05-2009
Сообщение 30 из 64 (453 просмотров)

Re: Revit API

[ Изменено ]
03-17-2013 05:00 AM в ответ на: kart1984

Приветствую!

Все очень просто. Вы пытаетесь преобразовать массив элементов SelElementSet в объект одного элемента Element. Естественно это не возможно. То есть переменная sel уже сама по себе является массивом элементов. Если вам нужно получить один элемент то нужно его забрать из массива сначала, даже если он в нем единсвенный.

На скорую руку пока так. Если нужно разжевать то позднее все распишу.

Активист сообщества
Post to the Community

Have questions about Autodesk products? Ask the community.

New Post