Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Если:
3. Использую команду из Express Tools - List Xdata и получаю такое значение: * Code 1011, 3D World space position: (0 50 0). Т.е. то значение, которое мне и нужно, НО!
то и в .NET API ты получишь тоже значение.
2
7.105427357601E-15
Неудачный пример привел ))
Ну в общем смысл в том, что проблема у меня после поворота присутствует, но я пока не могу сообразить даже где. Наверно это уже не вопрос для данной темы
3
Резюме программистов / Re: Программист(удалённая работа)
« Последний ответ от junio77 22-05-2017, 20:57:50 »
Ritor1, Вы еще ищете работу ?
4
Шутишь? На числа внимательно посмотри и вспомни про точность представления чисел типа double.
5
Попробую как-раз на получении ручек. Отпишусь потом получилось или нет
Итак - попробовал. Работает! С перемещением и копированием все хорошо. Даже с копированием в другой документ. Но счастье длилось не долго - до тех пор как я повернул примитив. Вот тут началось что-то такое, что я уже пол вечера понять не могу.
Пример:
1. Строю примитив с расширенными данными так, чтобы первая точка была в (0,0,0)
2. Затем поворачиваю примитив так, чтобы эта точка переместилась в (0,50,0)
3. Использую команду из Express Tools - List Xdata и получаю такое значение: * Code 1011, 3D World space position: (0 50 0). Т.е. то значение, которое мне и нужно, НО!
4. При чтении из Xdata я получаю другую координату! При этом:
Код - C# [Выбрать]
  1. TypedValue[] resBufArr = resBuf.AsArray();
  2. var wasInsertionPoint = false;
  3. foreach (TypedValue typedValue in resBufArr)
  4. {
  5.     switch ((DxfCode)typedValue.TypeCode)
  6.     {
  7.         case DxfCode.ExtendedDataWorldXCoordinate:
  8.             {
  9.                 if (!wasInsertionPoint)
  10.                 {
  11.                     AcadHelpers.Editor.WriteMessage("\n(Point3d)typedValue.Value: " + (Point3d)typedValue.Value);
  12.                     InsertionPoint = (Point3d)typedValue.Value;
  13.                     wasInsertionPoint = true;
  14.                 }
  15.                 else
  16.                 {
  17.                     EndPoint = (Point3d)typedValue.Value;
  18.                 }
  19.                 break;
  20.             }
  21.     }
  22. }
вижу в командной строке (Point3d)typedValue.Value: (7.105427357601E-15,50,0). Даже не соображу куда копать и что читать  :(
6
Здравствуйте. Предлагаем постоянную работу для программистов в указанных программах
Нужно писать приложения для них, для оптимизации работы проектировщиков.
Мы - проектно-строительная организация, занимающаяся проектированием и строительством дорог, зданий и перекладкой инж.коммуникаций.
Работы много. Компания постоянно развивается.

Civil и Revit версии 2016 и 2017-ой

Будет отлично, если это будет 1 человек.

В Civil-e нужно работать в основном с объектами - колодец-труба или фитинги
Пишите в личку свои предложения или резюме.

С уважением
Татьяна Анатольевна

7
Revit API / Цепочка размеров
« Последний ответ от Владимир П 22-05-2017, 20:47:45 »
Здравствуйте, знатоки Revit API.
Есть код по созданию нескольких осей.
Код - C# [Выбрать]
  1.             // вертикальные оси
  2.             for (i = 0; i < kol_sh_X; i++)
  3.             {
  4.                 startPoint = new XYZ(startPoint.X + ShagX[i] * ku, startPoint.Y, 0);
  5.                 endPoint = new XYZ(startPoint.X, endPoint.Y, 0);
  6.                 geomLine = Autodesk.Revit.DB.Line.CreateBound(endPoint, startPoint);
  7.                 // Create a grid using the geometry line
  8.                 lineGrid = document.Create.NewGrid(geomLine);
  9.             } // End of for block
  10.  
Все работает.

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

Код - C# [Выбрать]
  1.     Document doc = m_revit.Application.ActiveUIDocument.Document;
  2.  
  3.     ElementSet selections = new ElementSet();
  4.     foreach (ElementId elementId in m_revit.Application.ActiveUIDocument.Selection.GetElementIds())
  5.     {
  6. selections.Insert(m_revit.Application.ActiveUIDocument.Document.GetElement(elementId));
  7.     }
  8.    ReferenceArray referenceArray = new ReferenceArray();
  9.     foreach (Grid grid in selections)
  10.     {
  11.     //for grid in selection:
  12.                 referenceArray.Append(grid.Curve.Reference);
  13.     }
  14.     Autodesk.Revit.DB.XYZ p1 = new XYZ(0, 0, 0);
  15.     Autodesk.Revit.DB.XYZ p2 = new XYZ(10, 0, 0);
  16.                
  17.     Line line = Line.CreateBound(p1, p2);
  18.          
  19.         Transaction t = new Transaction(m_revit.Application.ActiveUIDocument.Document, "create dimension");
  20.         t.Start();
  21.          
  22.         doc.Create.NewDimension( doc.ActiveView, line, referenceArray );
  23.          
  24.         t.Commit();
  25.  
Тоже все работает.

Хочу объединить эти два куска в один. Т. е. теперь задача - программно отрисовать несколько осей и проставить размеры между ними. Казалось, все просто… однако, добавляю строки из второго кода в первый
Код - C# [Выбрать]
  1.             // вертикальные оси
  2.             //Autodesk.Revit.DB.ReferenceArray referenceArray;
  3.             //referenceArray = new Autodesk.Revit.DB.ReferenceArray();
  4.    ReferenceArray referenceArray = new ReferenceArray();
  5.             for (i = 0; i < kol_sh_X; i++)
  6.             {
  7.                 startPoint = new XYZ(startPoint.X + ShagX[i] * ku, startPoint.Y, 0);
  8.                 endPoint = new XYZ(startPoint.X, endPoint.Y, 0);
  9.                 geomLine = Autodesk.Revit.DB.Line.CreateBound(endPoint, startPoint);
  10.                 // Create a grid using the geometry line
  11.                 lineGrid = document.Create.NewGrid(geomLine);
  12.                 referenceArray.Append(lineGrid.Curve.Reference);
  13.             } // End of for block
и НЕ работает.
В самом коде при построении ошибок не показывает. Но при запуске надстройки в самом Ревите обнаруживает исключение на строке 
                referenceArray.Append(lineGrid.Curve.Reference);

Пожалуйста, подскажите, что не так.
8
А вот и нет)) Вываливается ошибка, если я пробую сразу добавить массив. А вот так добавляются:
Значит я просто тебя не понял.
9
Но я впал в небольшой ступор - а как их теперь получить?
По индексу в массиве:
Код - C# [Выбрать]
  1. InsertionPoint = (Point3d)resBufArr[0];
Не думаю, что так будет хорошо. Нужно точно знать эти индексы, а в процессе написания кода можно внести изменения и упустить этот момент.
В данном примере (но у меня всего две точки) я сделал так:
Код - C# [Выбрать]
  1. TypedValue[] resBufArr = resBuf.AsArray();
  2. var wasInsertionPoint = false;
  3. foreach (TypedValue typedValue in resBufArr)
  4. {
  5.     switch ((DxfCode)typedValue.TypeCode)
  6.     {
  7.         case DxfCode.ExtendedDataWorldXCoordinate:
  8.             {
  9.                 if (!wasInsertionPoint)
  10.                 {
  11.                     InsertionPoint = (Point3d)typedValue.Value;
  12.                     wasInsertionPoint = true;
  13.                 }
  14.                 else
  15.                 {
  16.                     EndPoint = (Point3d)typedValue.Value;
  17.                 }
  18.                 break;
  19.             }
  20.     }
  21. }
Но если точек будет больше, то это можно решить введя вспомогательный счетчик. Ну или еще что придумать. В общем - варианты есть. Я просто поспешил задать вопрос ))
10
Но я впал в небольшой ступор - а как их теперь получить?
По индексу в массиве:
Код - C# [Выбрать]
  1. InsertionPoint = (Point3d)resBufArr[0];
Страницы: [1] 2 3 ... 10