Автор:
doctorrazДобавлено: 18 Feb 2020 14:52 (GMT + 4)
baksconstructor :
McCOM2.dll муторно использовать, да и подглючивает она в 12 СПДС, хотел напрямую получить.
напрямую ты не получишь, если через энаблер, то СОМ доступ заблокирован, только через лисп выдернуть, а вот дальше как полученное разбирать ХЗ, но имха это тупик
(если есть нужда работать с объектами СПДС. значит и СПДС имеется)
но средствами McCOM2, в
автокадеможно из набора SelectionSet получить "родные"объекты СПДС (даже с блоками работает)))
и потом уже средствами McCOM2 без извращений получить СПДС свойства.
Плюс этого подхода используя dxf коды и условия внутри запроса можно творить из VB классные вещи, не мелькая файлами и листами перед пользователем и не используя перебор, в итоге получая в набор только те объекты которые попадают под критерии, сразу из всего документа. Работает очень шустро.
Цикл будет только один.. получение объекта СПДС по указателю АК и выдергивание нужных свойств.
Маленькая ложка дегтя... это не работает в нанопродуктах
------------
Ты сто раз видел это :drinks:
Код:
Public ThisDrawing As Object
Sub method_not_implemented_under_this_platform()
Dim intType(0) As Integer '(2)
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
Set ThisDrawing = objNanoCAD.ActiveDocument
intType(0) = 0
varDat(0) = "spdstable2" 'таблицы СПДС от 8,0 и младше, за СПДС 11, 12 не скажу _
старые версии СПДС, старше 8,0 "spdstable"
Set objSelSet = vbdPowerSet("seTEST")
objSelSet.Select 5, , , intType, varDat
Debug.Print "spdstable-"& objSelSet.Count
Dim objAK As Object
Dim ObjMC As Object
For Each objAK In objSelSet
Set ObjMC = spds.Object(objAK) 'имеем полный доступ к свойствам СПДС в АК но в нане "method not implemented under this platform"
namee = ObjMC("Name")
'или
nameeee = ObjMC!Name
Debug.Print "Имя таблицы-"& namee
'работаем с ним дальше
Next
End Sub
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
[SIZE="1"][COLOR="Gray"]----- добавлено через ~7 мин. -----[/COLOR][/SIZE]
Boxa :
Это само собой, что свойства какие нить в отладчике будут, только при наличии енаблера...
при наличии энаблера до свойств объектов СПДС средствами VB не дотянуться, только lisp
Одна из функций энаблера блокировать доступ, иначе нашелся бы умник который с энаблером частично восстановил функционал движка mcad))) без денег по любви))