Olga94
15.Апрель.2026 11:40:55
1
Пользователь выделяет объекты на чертеже через стандартный метод SelectOnScreen Возвращается набор SelectionSet (там разные объекты могут быть, не только СПДС)В этом наборе есть выноски – объекты СПДС. Но они в этом наборе видятся как прокси объекты. А мне надо работать далее с выделенными выносками – текст, координаты.
Есть вариант обратиться к объектам СПДС через сервер СПДС: Server .Query . Но это вообще все объекты чертежа.
Подскажите пожалуйста, как из выбранного пользователем набора обратиться к объектам СПДС в vba excel?
Public ThisDrawing As Object
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'* Sub : method_ss - перебор ячеек таблицы!
'* Created : 18-06-2025 15:57
'* Author : VBATools
'* Contacts : https://vk.com/vbatools
'* Copyright : VBATools.ru
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'* Sub : method_ss - добавьте описание!
'* Created : 18-06-2025 15:57
'* Author : VBATools
'* Contacts : https://vk.com/vbatools
'* Copyright : VBATools.ru
'* Modified : Date and Time Author Description
'* Updated : 18-06-2025 15:57 VBATools
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Sub IterCels()
Dim intType(0) As Integer
Dim varDat(0) As Variant
Dim objSelSet As Object
Dim objNanoCAD As Object
Set SPDS = CreateObject("McCOM2.Server")
On Error Resume Next
Set objNanoCAD = GetObject(, "AutoCAD.Application")
If Err.Number <> 0 Then
Err.Number = 0
Debug.Print Err.Number
Set objNanoCAD = GetObject(, "nanoCAD.Application")
If Err.Number <> 0 Then
MsgBox "Не запущен CAD"
Exit Sub
End If
End If
On Error GoTo 0
Dim ObjMC As Variant 'McCOM2.SymFrame
Dim objAK As Variant
Set ThisDrawing = objNanoCAD.ActiveDocument
intType(0) = 0
varDat(0) = "SPDSTABLE2"
Set objSelSet = vbdPowerSet("seTEST")
objSelSet.Select 5, , , intType, varDat
Debug.Print "spdstable-" & objSelSet.Count
For Each objAK In objSelSet
'Stop
Set acadTable = SPDS.Object(objAK) 'имеем полный доступ к свойствам СПДС в АК _
но в нане "method not implemented under this platform"
For i = 1 To acadTable.ColCount
For j = 1 To acadTable.RowCount
Set cel0 = acadTable.Cell(i, j)
Set fr = cel0.Format
'fr.TextAngle = 90
' fr.Enabled = False
Debug.Print "DisplayText: " & acadTable.Cell(j, i).DisplayText & " " & "Text: " & acadTable.Cell(j, i).Text
Next
Next
Set cel = acadTable.Cell(1, 3)
txt = cel.DisplayText
With acadTable.Cell(i + 1, j + 1)
sText = .DisplayText
End With
Next
End Sub
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'* Function : vbdPowerSet - добавьте описание!
'* Created : 18-06-2025 16:02
'* Author : VBATools
'* Contacts : https://vk.com/vbatools
'* Copyright : VBATools.ru
'* Argument(s): Description
'*
'* strName As String :
'*
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Public Function vbdPowerSet(strName As String) As Object 'AcadSelectionSet
Dim objSelSet As Object ' AcadSelectionSet
Dim objSelCol As Object ' AcadSelectionSets
Set objSelCol = ThisDrawing.SelectionSets
For Each objSelSet In objSelCol
If objSelSet.Name = strName Then
objSelSet.Delete
Exit For
End If
Next
Set objSelSet = ThisDrawing.SelectionSets.Add(strName)
Set vbdPowerSet = objSelSet
End Function
@kpblc
есть в справке по McCOm2
еще есть у @kpblc ObjectId в McObjectId
в селсет есть фильтры, используй их, что бы в набоор попадало только нужное
ты не читаешь документацию,
у сервера есть метод селект,
и также можно применять фильтры, но это работает только по активному пространству
1 лайк
kpblc
15.Апрель.2026 16:34:21
3
doctorRaz:
в селсет есть фильтры
Угу, только они с объектами СПДС могут и не срабатывать. У меня по крайней мере в какой-то момент в лиспе не срабатывали (и плевать на регистр было).
На старых нано именно через фильтры спдс и собирал ибо перекидывать объекты платформы в мультикад его слишком долго учили
На вебеа, тыж в курсе в лисп я не умею
Olga94
16.Апрель.2026 05:24:28
5
Спасибо!
Вот оно:
Set spdsObj = SPDS.Object(objAK)
Теперь в spdsObj имеем полноценный объект SPDS со всеми свойствами, полученный из выделенного объекта АК.