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

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

Страницы: [1] 2 3 ... 10
1
Revit API / Re: Пересечение solid и точки, как ?
« Последний ответ от Legantmar 16-08-2017, 21:46:39 »
Александр, спасибо
2
Revit API / Re: Пересечение solid и точки, как ?
« Последний ответ от Александр Ривилис 16-08-2017, 20:44:01 »
Я хотя и не пишу для Revit, но за несколько минут нашёл пример пересечения Solid и Curve при помощи Solid.IntersectWithCurve(): https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/Revit-API/files/GUID-2601C028-7E6D-462A-9234-46FFA3E2D31E-htm.html

P.S.: Точки ни с чем пересекаться не могут.
3
Revit API / Re: Пересечение solid и точки, как ?
« Последний ответ от Александр Ривилис 16-08-2017, 20:36:04 »
в Dynamo есть нод intersec который работает с пересечением любых геометрий, но в revitAPI это только с линиями
Dynamo - Open Source проект. Так что можешь посмотреть в нём исходники.
4
Revit API / Пересечение solid и точки, как ?
« Последний ответ от Legantmar 16-08-2017, 16:29:27 »
есть элемент, получаю его геометрию, например, solid.
в скрипте делаю вспомогательные построения, например линии.
задача определить есть ли пересечение средней точки линии с solid.
понимаю, что задача не простая, так как подходящих "инструментов" в revitAPI нет.
как быть?
буду рад любым идеям..

а можно пример?
можно.
делаю автообразмеривание формообразующих элементов.
- получаю линии граней у solid
- создаю offset по заданному вектору (к примеру, 0,1,1)
- если новая линия (offset линия) попадает внутрь solid, то изменяю вектор на противоположный 0,-1,1
- по линиям (и референс точкам граней) создаю размеры
в Dynamo есть нод intersec который работает с пересечением любых геометрий, но в revitAPI это только с линиями

как вариант:
- уже после построения размера, получать его линию (или какую то геометрию) и проверять на пересечение
проблема:
- как потом задать смещение этого размера в нужную сторону ? ))
5
AutoCAD .NET API / Re: Проверка наличия элементов в TextStyleTable
« Последний ответ от Дмитриий 16-08-2017, 13:54:03 »
Ого! Спасибо еще раз за информацию! Так действительно лучше! )

Цитировать
Один вопрос - одна тема. Не стесняйся на каждый вопрос, не относящийся напрямую к предыдущему, создавать новую тему.
Понял! Учту!
6
И за канал на ютубе тоже кстати спасибо, тоже помог разобраться с некоторыми моментами! )
На здоровье  :)

Пара замечаний к приведенному коду:
1.
Код - C# [Выбрать]
  1. if (Tt1.Has(textStyleStr) == false)
Это очень "по-индийски". Правильнее так:
Код - C# [Выбрать]
  1. if (!Tt1.Has(textStyleStr))
2.
Код - C# [Выбрать]
  1. textStyleStr = "Standard";
  2. layerStr = "0";
В принципе, ничего криминального, но лучше использовать свойства:
Код - C# [Выбрать]
  1. SymbolUtilityServices.LayerZeroName
  2. SymbolUtilityServices.TextStyleStandardName
А еще лучше - использовать специальные методы:
Код - C# [Выбрать]
  1. SymbolUtilityServices.GetTextStyleStandardId(mainDoc.Database)
  2. SymbolUtilityServices.GetLayerZeroId(mainDoc.Database) или mainDoc.Database.LayerZero
Можно еще использовать вместо стандартного текстового стиля и нулевого слоя текущий стиль и текущий слой в чертеже:
Код - C# [Выбрать]
  1. mainDoc.Database.Textstyle
  2. mainDoc.Database.Clayer
7
Если еще подскажете тему, или материалы где можно разобраться с системами координат буду еще больше благодарен!
А то метод GetPoint при выборе точки на чертеже перемещает ее совсем не туда куда мне надо, если система координат стоит пользовательская а не мировая.
И еще раз спасибо за помощь!
Один вопрос - одна тема. Не стесняйся на каждый вопрос, не относящийся напрямую к предыдущему, создавать новую тему.
8
AutoCAD .NET API / Re: Проверка наличия элементов в TextStyleTable
« Последний ответ от Дмитриий 16-08-2017, 13:14:48 »
Цитировать
А что она должна делать в таком случае?
Это и должна! ) Спасибо огромное за подсказку, не знал про Has! И за канал на ютубе тоже кстати спасибо, тоже помог разобраться с некоторыми моментами! )
Хотел реализовать примерно так, но до этого не получалось:
Код - C# [Выбрать]
  1.             {
  2.                 TextStyleTable Tt1 = (TextStyleTable)tr1.GetObject(mainDoc.Database.TextStyleTableId, OpenMode.ForRead);
  3.                 if (Tt1.Has(textStyleStr) == false)
  4.                 {
  5.                     textStyleStr = "Standard";
  6.                 }
  7.                 TextStyleTableRecord TextSt1 = tr1.GetObject(Tt1[textStyleStr], OpenMode.ForRead) as TextStyleTableRecord;
  8.                 LayerTable lt1 = (LayerTable)tr1.GetObject(mainDoc.Database.LayerTableId, OpenMode.ForRead);
  9.                 if (lt1.Has(layerStr) == false)
  10.                 {
  11.                     layerStr = "0";
  12.                 }
  13.                 LayerTableRecord LayerSt1 = tr1.GetObject(lt1[layerStr], OpenMode.ForRead) as LayerTableRecord;
  14.                 tr1.Commit();



Если еще подскажете тему, или материалы где можно разобраться с системами координат буду еще больше благодарен!
А то метод GetPoint при выборе точки на чертеже перемещает ее совсем не туда куда мне надо, если система координат стоит пользовательская а не мировая.
И еще раз спасибо за помощь!
9
Соответственно если в чертеже нет нужного мне слоя то программа падает.
А что она должна делать в таком случае?
Проверить, есть ли нужный слой, можно просто. Достаточно добавить после 5-й строки:
Код - C# [Выбрать]
  1. bool hasLayer = lt1.Has("02_Сетка");
Аналогично и с текстовым стилем.
10
AutoCAD .NET API / Проверка наличия элементов в TextStyleTable
« Последний ответ от Дмитриий 16-08-2017, 11:29:00 »
Здравствуйте, только начал нормально осваивать С# под AutoCAD, написал маленькую программку по созданию подписей координат на чертеже. Но что то встрял с проверкой наличия нужного текстового стиля и слоя в чертеже... Получаю их из транзакции, а вот как заранее проверить их наличие в чертеже пока как-то разобраться не могу... Соответственно если в чертеже нет нужного мне слоя то программа падает. Буду благодарен если подскажете в какую сторону смотреть. А то информацию по программированию в автокаде приходится собирать по всей сети, и как-то не могу наткнуться на нужную мне тему. Буду благодарен если кинете просто пару ссылок на уже существующие примеры или темы.

Код - C# [Выбрать]
  1. using (var tr1 = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
  2.             {
  3.                 TextStyleTable Tt1 = (TextStyleTable)tr1.GetObject(mainDoc.Database.TextStyleTableId, OpenMode.ForRead);
  4.                 TextStyleTableRecord TextSt1 = tr1.GetObject(Tt1["LIKE14"], OpenMode.ForRead) as TextStyleTableRecord;
  5.                 LayerTable lt1 = (LayerTable)tr1.GetObject(mainDoc.Database.LayerTableId, OpenMode.ForRead);
  6.                 LayerTableRecord LayerSt1 = tr1.GetObject(lt1["02_Сетка"], OpenMode.ForRead) as LayerTableRecord;
  7.                 tr1.Commit();
Страницы: [1] 2 3 ... 10