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

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

Страницы: 1 2 [3] 4 5 ... 10
21
Если пользователь жмет Esc, то ничего не вводится, можно ввести только префикс или только суффикс. Зачем его дополнительно проверять?

Спасибо за совет с диалоговым окном, пойду смотреть как его создавать)
22
AutoCAD .NET API / Re: Ввод строки пользователем, начинающейся с "("
« Последний ответ от avc 03-10-2024, 12:49:14 »
Окошко диалоговое создайте.
Между прочим: вы забываете проверять, что пользователь может передумать на каждом запросе и нажать Esc.
23
AutoCAD .NET API / Ввод строки пользователем, начинающейся с "("
« Последний ответ от PuSTaM 03-10-2024, 12:34:49 »
Доброго времени суток.
Пишу программку, которая добавляет в подписи размеров префиксы и суффиксы. У некоторых пользователей есть потребность занести подпись в круглые скобки, но при вводе круглой открывающей круглой скобки автокад переходит в режим ввода lisp'а. Подскажите, пожалуйста, начинающему разработчику, как позволить пользователям ввести в префикс символ "(".

Вот такой код у меня получился на данный момент

Код - C# [Выбрать]
  1.         public void ChangeDimText()
  2.         {
  3.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  4.             Database dB = doc.Database;
  5.             Editor ed = doc.Editor;
  6.  
  7.             TypedValue[] filterListForSelectDimensions = new TypedValue[1];
  8.             filterListForSelectDimensions[0] = new TypedValue(0, "DIMENSION");
  9.             SelectionFilter filterForSelectDimensions = new SelectionFilter(filterListForSelectDimensions);
  10.  
  11.             PromptResult pref = doc.Editor.GetString("\nВведите префикс");
  12.             PromptResult suf = doc.Editor.GetString("\nВведите суффикс");
  13.  
  14.             // Starts a new transaction with the Transaction Manager
  15.             using (Transaction trans = dB.TransactionManager.StartTransaction())
  16.             {
  17.                 ed.WriteMessage("\nВыберите размеры для редактирования");
  18.                 PromptSelectionResult selDim = ed.GetSelection(filterForSelectDimensions);
  19.                 if (selDim.Status != PromptStatus.OK)
  20.                 {
  21.                     ed.WriteMessage("\nНет выбранных объектов");
  22.                     return;
  23.                 }
  24.                 ObjectIdCollection selectedDimsId = new ObjectIdCollection(selDim.Value.GetObjectIds());
  25.                 for (int i = 0; i < selectedDimsId.Count; i++)
  26.                 {
  27.  
  28.                     DBObject exampleOfDim = selectedDimsId[i].GetObject(OpenMode.ForWrite);
  29.                     Dimension dimensionForEdit = exampleOfDim as Dimension;
  30.                     if (dimensionForEdit.DimensionText != "")
  31.                     {
  32.                         string text = dimensionForEdit.DimensionText;
  33.                         if (dimensionForEdit.DimensionText.StartsWith("\\X"))
  34.                         {
  35.                             dimensionForEdit.DimensionText = dimensionForEdit.DimensionText.Insert(2, pref.StringResult) + suf.StringResult;
  36.                         }
  37.                         else
  38.                             dimensionForEdit.DimensionText = pref.StringResult + dimensionForEdit.DimensionText + suf.StringResult;
  39.                     }
  40.                     else
  41.                     {
  42.                         string newPrefix = pref.StringResult + dimensionForEdit.Prefix;
  43.                         dimensionForEdit.Prefix = newPrefix;
  44.                         dimensionForEdit.Suffix += suf.StringResult;
  45.                     }
  46.                 }
  47.                 trans.Commit();
  48.             }
  49.         }
  50.     }
  51. }
25
Задача получения точки внутри контура, заданного полилинией. Если контур выпуклый, то решений есть несколько, в т.ч. лисп Евгения Елпанова.
Если же контур вогнутый (в форме "Г", "П", "С" и т.п.) или продолговатый извилистый, или "разветвляющийся", то точка (геометрический центр, центр масс, центроид) чаще оказывается вовне.
Наверное, есть и общее решение?
Map 3D, например, для своих целей это делает.
26
Revit API / Включение Revit проекта при запуске Revit (v2022)
« Последний ответ от BIM_pomoshnic 30-09-2024, 17:43:28 »


Доброго времени суток, сам я не особо программист, но что-то вроде умею и уже около недели бьюсь об заклад со следующим вопросом:
На данный момент у меня и у нескольких моих коллег очень долго с Revit сервера открываются Revit проекты (~30-60 минут), так как я сам не являюсь работником в ревите, решил сделать так, чтобы рабочие компы запускались заранее (условно за час), а после включался Revit и запускался проект с Revit сервера.

Условный пример: После запуска и прогрузки Revit`a, через RevitAPI нужно чтобы запускался проект с Revit сервера(Сами IP адреса для Revit сервера и проектов уже указаны в RSN.ini) сам, либо через какое-то время, либо после проверки состояния, что приложение Revit полностью прогрузилось. Именно здесь я никак не могу найти/придумать решение. Видел подобные аналоги, но все примеры что я до этого видел, сводится к запуску локальной копии с PC, но я бы хотел сразу доставать модель из сервера.

Наверное мне нужно не столько идеи и советы, сколько конкретные примеры или предложения. Если нужно уточнения в моем вопросе, то готов расписать.
27
DimVer,
Не вижу ничего отрицательного в этом, хотя нужно будет учесть все возможные последствия.
28
Добрый день, подскажите на сколько корректно будет хранить параметры приложения в этом же разделе, где хранится AcadAppInfo?
29
AutoCAD .NET API / Re: Пересечение полилиний
« Последний ответ от Захаров Максим 26-09-2024, 11:21:24 »
Спасибо Александр. Все получилось, как то так
Код - vb.net [Выбрать]
  1. <CommandMethod("convReg")>
  2.     Public Sub convReg()
  3.         Dim acDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument ' открываем базу данных чертежа
  4.         Dim ed As Editor = acDoc.Editor
  5.         Dim db As Database = acDoc.Database
  6.         Dim tr As Transaction = db.TransactionManager.StartTransaction()
  7.         Dim acBlkTbl As BlockTable = tr.GetObject(db.BlockTableId, OpenMode.ForRead)
  8.         Dim acBlkTblRec As BlockTableRecord = tr.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
  9.         Using tr
  10.             Try
  11.                 '=============================================================
  12.                 'выбираем трассу
  13.                 Dim pEntRes As PromptEntityResult = ed.GetEntity("Выберите полосу отвода: ")
  14.                 Dim parentEnt As Autodesk.AutoCAD.DatabaseServices.Entity = tr.GetObject(pEntRes.ObjectId, OpenMode.ForRead)
  15.                 If TypeOf parentEnt Is Autodesk.AutoCAD.DatabaseServices.Polyline Then
  16.                     Dim parentPline As Autodesk.AutoCAD.DatabaseServices.Polyline = parentEnt
  17.                     Dim tempCollection As DBObjectCollection = New DBObjectCollection()
  18.                     tempCollection.Add(parentPline)
  19.                     Dim parentRegionCollection As DBObjectCollection = New DBObjectCollection()
  20.                     parentRegionCollection = Region.CreateFromCurves(tempCollection)
  21.                     If parentRegionCollection.Count > 0 Then
  22.                         Dim parentRegion As Region = parentRegionCollection.Item(0)
  23.                         If parentRegion.Area > 0 Then
  24.                             'выбираем участки
  25.                             Dim acSSPrompt As PromptSelectionResult = acDoc.Editor.GetSelection()
  26.                             If acSSPrompt.Status = PromptStatus.OK Then
  27.                                 Dim acSSet As SelectionSet = acSSPrompt.Value
  28.                                 For Each acSSObj As SelectedObject In acSSet
  29.                                     If Not IsDBNull(acSSObj) Then
  30.                                         Dim childEnt As Autodesk.AutoCAD.DatabaseServices.Entity = tr.GetObject(acSSObj.ObjectId, OpenMode.ForRead)
  31.                                         If Not IsDBNull(childEnt) Then
  32.                                             If TypeOf childEnt Is Autodesk.AutoCAD.DatabaseServices.Polyline Then
  33.                                                 If parentRegion.Area = 0 Then
  34.                                                     tempCollection = New DBObjectCollection()
  35.                                                     tempCollection.Add(parentPline)
  36.                                                     parentRegionCollection = New DBObjectCollection()
  37.                                                     parentRegionCollection = Region.CreateFromCurves(tempCollection)
  38.                                                     If parentRegionCollection.Count > 0 Then
  39.                                                         parentRegion = parentRegionCollection.Item(0)
  40.                                                     End If
  41.                                                 End If
  42.                                                 Dim tempChildCollection As DBObjectCollection = New DBObjectCollection()
  43.                                                 tempChildCollection.Add(childEnt)
  44.                                                 Dim childCollection As DBObjectCollection = New DBObjectCollection()
  45.                                                 childCollection = Region.CreateFromCurves(tempChildCollection)
  46.                                                 If childCollection.Count > 0 Then
  47.                                                     Dim childRegion As Region = childCollection.Item(0)
  48.                                                     If childRegion.Area > 0 Then
  49.                                                         childRegion.BooleanOperation(BooleanOperationType.BoolIntersect, parentRegion)
  50.                                                         Dim points As Point2d() = Nothing
  51.                                                         Using brep = New Autodesk.AutoCAD.BoundaryRepresentation.Brep(childRegion)
  52.                                                             points = brep.Edges.[Select](Function(e) e.Vertex1.Point.Convert2d(New Plane)).ToArray()
  53.                                                         End Using
  54.                                                         Dim normal = childRegion.Normal
  55.                                                         Using pline = New Polyline(points.Length)
  56.                                                             For i As Integer = 0 To points.Length - 1
  57.                                                                 pline.AddVertexAt(i, points(i), 0.0, 0.0, 0.0)
  58.                                                             Next
  59.                                                             pline.Closed = True
  60.                                                             pline.Normal = normal
  61.                                                             Dim curSpace = CType(tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord)
  62.                                                             curSpace.AppendEntity(pline)
  63.                                                             tr.AddNewlyCreatedDBObject(pline, True)
  64.                                                         End Using
  65.                                                     End If
  66.                                                 End If
  67.                                             End If
  68.                                         End If
  69.                                     End If
  70.                                 Next
  71.                             End If
  72.                         End If
  73.                     End If
  74.                 End If
  75.             Catch ex As System.Exception
  76.             End Try
  77.             tr.Commit()
  78.         End Using
  79.     End Sub
30
AutoCAD .NET API / Re: Пересечение полилиний
« Последний ответ от Александр Ривилис 25-09-2024, 17:01:02 »
Добрый день. Подскажите пожалуйста, возможно ли получить область пересечения (желательно в виде полилинии) двух замкнутых полилиний?
В API готовых средств нет, но можно преобразовать замкнутые полилинии в Region'ы, получить их пересечение и затем из итогового Region при помощи Brep API получить контур пересечения.
Страницы: 1 2 [3] 4 5 ... 10