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

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

Как получить точку привязки начала размера AutoCAD на VBA?

Ответ
Поиск в этой теме
Непрочитано 25.09.2013, 09:32
Как получить точку привязки начала размера AutoCAD на VBA?
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,079

Помогите пожалуйста получить точку привязки начала размера AutoCAD на VBA!
Посмотрел сам и понимаю что на VBA AutoCAD нельзя написать такой простой программы как замена нескольких размеров одним общим с повторением величин заменённых более мелких размеров.
Как было бы удобно пользоваться такой программой в AutoCAD! Подскажите пожалуйста как сделать такую программу на VBA!
Как получить точки привязки размеров на VBA?

Последний раз редактировалось МишаИнженер, 25.09.2013 в 10:25.
Просмотров: 9045
 
Непрочитано 24.08.2015, 08:18
#21
Boxa

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


Эх... за два года так ничего и не написал, польстился на готовое. Грустно. =(
Boxa вне форума  
 
Автор темы   Непрочитано 01.09.2022, 07:44
#22
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Цитата:
Сообщение от maratovich Посмотреть сообщение
Решилось просто - первая и вторая точка по порядку и есть привязки размера.
Ну вот и решение на VBA
Автор сам разберешься что делать или как ?
Уважаемый Маратович! Подскажите пожалуйста, в каком списке, библиотеке или словаре вы нашли 12 точек из которых 1 и 2 точка это точки привязки размеров? Как получить доступ к этому списку точек на VBA?
Цитата:
Сообщение от Boxa Посмотреть сообщение
Эх... за два года так ничего и не написал, польстился на готовое. Грустно. =(
Пока мне удалось сделать вот такую функцию:
Код:
[Выделить все]
Public Sub ПолучитьТочкиПривязкиРазмера(objAcadDoc As AcadDocument, objРазмер As AcadObject, _
Optional startPnt As Variant, Optional endPnt As Variant, Optional location As Variant, Optional PText As Variant)
'Функция получает точки привязки размера
Dim sТекст As String
   'В командную строку передается LISP-выражение, возвращающее первую точку в WCS (код DXF - 13)
    objAcadDoc.SendCommand ("(cdr (assoc 13 (entget (handent " & """" & objРазмер.Handle & """" & "))))" & vbCr)
'    Debug.Print ("(cdr (assoc 13 (entget (handent " & """" & objРазмер.Handle & """" & "))))" & vbCr)
    sТекст = Mid(CStr(objAcadDoc.GetVariable("lastprompt")), 2, Len(CStr(objAcadDoc.GetVariable("lastprompt"))) - 2)
    startPnt = SplitDbl(sТекст, " ")
   
    'В командную строку передается LISP-выражение, возвращающее вторую точку в WCS (код DXF - 14)
    objAcadDoc.SendCommand ("(cdr (assoc 14 (entget (handent " & """" & objРазмер.Handle & """" & "))))" & vbCr)
    sТекст = Mid(CStr(objAcadDoc.GetVariable("lastprompt")), 2, Len(CStr(objAcadDoc.GetVariable("lastprompt"))) - 2)
    'В переменную endPnt записывается массив с координатами второй точки
    endPnt = SplitDbl(sТекст, " ")
   
   'В командную строку передается LISP-выражение, возвращающее точку размерной линии в WCS (код DXF - 10)
    objAcadDoc.SendCommand ("(cdr (assoc 10 (entget (handent " & """" & objРазмер.Handle & """" & "))))" & vbCr)
    sТекст = Mid(CStr(objAcadDoc.GetVariable("lastprompt")), 2, Len(CStr(objAcadDoc.GetVariable("lastprompt"))) - 2)
    'В переменную endPnt записывается массив с координатами второй точки
    location = SplitDbl(sТекст, " ")
   
   'В командную строку передается LISP-выражение, возвращающее точку текста в WCS (код DXF - 11)
    objAcadDoc.SendCommand ("(cdr (assoc 11 (entget (handent " & """" & objРазмер.Handle & """" & "))))" & vbCr)
    sТекст = Mid(CStr(objAcadDoc.GetVariable("lastprompt")), 2, Len(CStr(objAcadDoc.GetVariable("lastprompt"))) - 2)
    PText = SplitDbl(sТекст, " ")
End Sub
Как можно отключить вывод промежуточных сообщений в командную строку при работе этой функции?

Последний раз редактировалось МишаИнженер, 01.09.2022 в 08:59.
МишаИнженер вне форума  
 
Непрочитано 02.09.2022, 18:03
1 | #23
Boxa

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


Блин, тема от сентября 2013 года, 9 лет прошло, на предыдущей странице полностью расписано как получить точки размера на VBA, но автор стремится сделать какую то дичь...
Вот код, без проверок, надеюсь его адаптация займет у Вас гораздо меньше времени:
Код:
[Выделить все]
Sub sefgksef()

    Dim returnObj As AcadObject
    Dim basePnt As Variant
    
    On Error Resume Next
    
RETRY:
    ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select an object"
    
    If Err <> 0 Then
        Err.Clear
        MsgBox "Program ended.", , "GetEntity Example"
        Exit Sub
    Else
        Dim btrH As String
        btrH = Format(Hex(CLng("&H" & returnObj.Handle) + 5), "000")

        Dim tempObj As AcadObject
        Set tempObj = ThisDrawing.HandleToObject(btrH)
        
        Dim points() As AcadPoint
        Dim idx As Integer
       
        For Each obj In tempObj
            If obj.EntityName = "AcDbPoint" Then
                ReDim Preserve points(idx)
                Set points(idx) = obj
                idx = idx + 1
            End If
        Next
    
        Dim sPoint As String ' начальная точка
        sPoint = points(0).Coordinates(0) & " " & points(0).Coordinates(1)
        
        Dim ePoint As String 'конечная точка
        ePoint = points(1).Coordinates(0) & " " & points(1).Coordinates(1)
        
        Dim mPoint As String ' точка линии выноски
        mPoint = points(2).Coordinates(0) & " " & points(2).Coordinates(1)
        
        ThisDrawing.Utility.Prompt "Dim start point: " & sPoint & vbCrLf
        ThisDrawing.Utility.Prompt "Dim end point: " & ePoint & vbCrLf
    End If
    
    GoTo RETRY
End Sub
Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Как можно отключить вывод промежуточных сообщений в командную строку при работе этой функции?
есть системная переменная "CMDECHO"

Последний раз редактировалось Boxa, 03.09.2022 в 08:21.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как получить точку привязки начала размера AutoCAD на VBA?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCad Civil 3D 2010. Как получить отчет по координатам точек характерной линии в формате Excel rassom Вертикальные решения на базе AutoCAD 2 16.10.2011 02:30
Как из отрезков в AutoCAD 2009 получить объект meola AutoCAD 9 24.04.2011 20:15
Как получить точку с именем рядом стоящей надписи? star282 AutoCAD 3 22.03.2011 17:12
Как выдавить круг в точку? (получить конус) yakusevich AutoCAD 14 25.09.2010 21:22
Как зная точку выбрать объект и получить его свойства? Zaghim Программирование 6 13.09.2010 09:07