Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно изменить координаты ручек размеров(в частности ординатных) в VBA?

Как программно изменить координаты ручек размеров(в частности ординатных) в VBA?

Ответ
Поиск в этой теме
Непрочитано 28.01.2019, 08:46 #1
Как программно изменить координаты ручек размеров(в частности ординатных) в VBA?
Кудахтыч
 
Регистрация: 28.01.2019
Сообщений: 62

Проблема в том что программного доступа в VBA к изменению координат точек вставки нет, также как и в свойствах ординатных размеров (да и в других размерах тоже самое) в самом Автокаде (2012-м в частности).
Однако, если программно создавать ординатный размер, то эти точки указывать можно, например, в массиве definingPoint можно задать определяющую точку:
Dim DimOrdinateObj As AcadDimOrdinate
Dim definingPoint(0 To 2) As Double
Dim leaderEndPoint(0 To 2) As Double
Dim useXAxis As Long
Set DimOrdinateObj = ThisDrawing.ModelSpace.AddDimOrdinate(definingPoint, leaderEndPoint, useXAxis)

Короче нужно в VBA в чертеже с уже существующими размерами изменить координаты точек передаваемых через массивы definingPoint и leaderEndPoint.

Библиотека свойств VBA объекта DimOrdinateObj. свойств координат не имеет, за исключением координат текста.
Просмотров: 2754
 
Непрочитано 28.01.2019, 08:48
1 | 1 #2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Насколько я помню, через VBA / ActiveX подобное в принципе нереализуемо. Ну нет такого функционала. Можно попытаться выкрутиться через lisp и его entmod. Ну или искать информацию по VB.NET - может, там такое есть.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.01.2019, 10:00
1 | 1 #3
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ну или искать информацию по VB.NET - может, там такое есть.
Там это есть: https://knowledge.autodesk.com/searc...2943F-htm.html

OrdinateDimension.DefiningPoint имеет и сеттер и геттер, так что никаких проблем с этим в .NET нет.
Boxa вне форума  
 
Непрочитано 29.01.2019, 10:03
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Хорошая задачка. Понравилось.
В коде никаких проверок нет, обработки ошибок нет и вообще ничего кроме идеи нет.

Код:
[Выделить все]
Sub Example_GetDataFromDimOrdinate()
    Dim returnObj As AcadObject
    Dim basePnt As Variant
    On Error Resume Next
    ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select an object"
    If Err <> 0 Then
        Err.Clear
        MsgBox "Program ended.", , "GetEntity Example"
        Exit Sub
    Else
        Dim tempObj As AcadObject
        Set tempObj = ThisDrawing.ObjectIdToObject(returnObj.ObjectID + 80^)
        Dim definingPoint As Variant
        definingPoint = tempObj.Item(4).Coordinates
        Dim leaderEndPoint As Variant
        leaderEndPoint = tempObj.Item(5).Coordinates
        Dim useXAxis As Integer
        useXAxis = CInt(tempObj.Item(3).Rotation)
                'тут есть все данные, для того, чтобы сделать
                'новый объект с необходимыми правками и после
                'стереть старый
    End If
End Sub
Удачи.

Последний раз редактировалось Boxa, 29.01.2019 в 10:29.
Boxa вне форума  
 
Автор темы   Непрочитано 29.01.2019, 23:45
#5
Кудахтыч


 
Регистрация: 28.01.2019
Сообщений: 62


Цитата:
Сообщение от Boxa Посмотреть сообщение
Хорошая задачка. Понравилось.
В коде никаких проверок нет, обработки ошибок нет и вообще ничего кроме идеи нет.

Код:
[Выделить все]
Sub Example_GetDataFromDimOrdinate()
    Dim returnObj As AcadObject
    Dim basePnt As Variant
    On Error Resume Next
    ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select an object"
    If Err <> 0 Then
        Err.Clear
        MsgBox "Program ended.", , "GetEntity Example"
        Exit Sub
    Else
        Dim tempObj As AcadObject
        Set tempObj = ThisDrawing.ObjectIdToObject(returnObj.ObjectID + 80^)
        Dim definingPoint As Variant
        definingPoint = tempObj.Item(4).Coordinates
        Dim leaderEndPoint As Variant
        leaderEndPoint = tempObj.Item(5).Coordinates
        Dim useXAxis As Integer
        useXAxis = CInt(tempObj.Item(3).Rotation)
                'тут есть все данные, для того, чтобы сделать
                'новый объект с необходимыми правками и после
                'стереть старый
    End If
End Sub
Удачи.

Да об этом я тоже думал, но это костыль ещё тот. Всё равно спс.
Кудахтыч вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно изменить координаты ручек размеров(в частности ординатных) в VBA?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно изменить у MTEXT свойство "динамические столбцы" на "единственный" ===AAA=== LISP 7 06.08.2018 18:26
Как получить координаты ручек в дин. блоках? power85 LISP 37 10.03.2017 11:47
Где хранятся данные о координатах отображения вюпорта, и как их программно изменить? Red Nova Программирование 9 03.04.2008 09:24
Как перевести координаты Модели в координаты Листа? ===AAA=== Программирование 6 24.10.2007 22:09
подскажите как программно начертить линии разных типов Александер Программирование 4 30.06.2005 07:17