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

Вернуться   Форум DWG.RU > Программное обеспечение > Прочее. Программное обеспечение > ПО от CSoft > СПДС 10 VBA. Как выделить/подсветить набор объектов СПДС, входящих в коллекцию?

СПДС 10 VBA. Как выделить/подсветить набор объектов СПДС, входящих в коллекцию?

Ответ
Поиск в этой теме
Непрочитано 25.12.2017, 14:24 #1
СПДС 10 VBA. Как выделить/подсветить набор объектов СПДС, входящих в коллекцию?
AlexV
 
Инженер
 
С-Пб
Регистрация: 02.10.2008
Сообщений: 3,685

То бишь имеем код, создающий коллекцию либо через Query, либо через Select. Как входящим в нее объектам "зажечь" ручки?

Код:
[Выделить все]
Dim spds_col_tmp  As McCOM2.ObjectsCollection
Dim spds_col_select  As McCOM2.ObjectsCollection
//...// 
Set spds_col_tmp = SPDS.Query(ObjSearch, str_uslovia_poiska)
Set spds_col_select = SPDS.Select("Выбери объекты", False)
С "родными" автокадовскими наборами objSelectionSet As AcadSelectionSet на vba решения вроде не было, но была возможность создать набор с определенным именем, а потом запустить процедурку типа

Код:
[Выделить все]
Private Sub podsvetkoy()
Dim p As String
p = "(progn(defun ss-gripset (/ SS SR SSN I)(vl-load-com)(setq SS(vla-get-selectionsets(vla-get-activedocument (vlax-get-acad-object))) SSN(vla-item SS ""Светить_всегд_светить_везде"") SR(ssadd))(vlax-for I SSN (ssadd(vlax-vla-object->ename I)SR))(sssetfirst nil SR)(princ))(ss-gripset))\n) "
ThisDrawing.SendCommand (p)
End Sub
,
и этот набор непонятных слов лисп-функций зажигал ёлку ручки. Но приходится плясать от Set SPDS = CreateObject("McCOM2.Server"), и "McCOM2.ObjectsCollection" к "AcadSelectionSet" отношения не имеет..
Может, есть встроенные в McCom2 функции для выделения входящих в набор спдс-объектов? А если нет - можно ли запихать McCOM2.ObjectsCollection в AcadSelectionSet?
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
Просмотров: 6406
 
Непрочитано 25.12.2017, 15:01
#2
Кулик Алексей aka kpblc
Moderator

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


Попробуй создать временный набор, в который перекинешь все объекты из коллекции.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.12.2017, 15:09
#3
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй создать временный набор, в который перекинешь все объекты из коллекции.
То есть поштучно проходить набор spds_col_tmp, каждый член коего впихивать в переменную as object, а ее уже добавлять в коллекцию AcadSelectionSet? Я так и думал, в принципе, просто надеялся, что есть способ "одним махом - семерых сотен побивахом".. Объектов обрабатываемых предпологается много, хотелось бы обрабатывать их побыстрее..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 25.12.2017, 15:28
#4
Кулик Алексей aka kpblc
Moderator

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


А коллекция случаем в лиспе не как вариант получается? Может, так сработает?
Код:
[Выделить все]
 (vl-load-com) (defun ss-high (name / ss) (if (and (= (type name) 'str) (= (type (setq ss (vl-catch-all-apply (function (lambda () (vla-item (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) name)))))) 'vla-object)) (progn (setq ss (ssadd)) (vlax-for item ss (ssadd (vlax-vla-object->ename item) ss)) (sssetfirst ss ss))))
Код загружать только один раз, а потом вызывать наподобие
Код:
[Выделить все]
ThisDrawing.SendCommand "(ss-high <ИмяТвоегоНабораВ_Кавычках>)"
Или
Код:
[Выделить все]
ThisDrawing.SendCommand "(ss-high УказательНаКоллекцию)"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 25.12.2017 в 16:09.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.12.2017, 15:46
#5
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А коллекция случаем в лиспе не как вариант получается? Может, так сработает?
Код:
[Выделить все]
 (vl-load-com) (defun ss-high (name / ss obj_lst) (cond ((and (= (type name) 'str) (= (type (setq ss (vl-catch-all-apply (function (lambda () (vla-item (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) name)))))) 'vla-object)) (vlax-for item ss (setq obj_lst (cons item obj_lst)))) ((= (type name) 'variant) (setq obj_lst (vlax-safearray->list (vlax-variant-value name))))) (setq ss (ssadd)) (foreach item obj_lst (ssadd item ss)) (sssetfirst ss ss))
Код загружать только один раз, а потом вызывать наподобие
Код:
[Выделить все]
ThisDrawing.SendCommand "(ss-high <ИмяТвоегоНабораВ_Кавычках>)"
Или
Код:
[Выделить все]
ThisDrawing.SendCommand "(ss-high УказательНаКоллекцию)"
Я, честно говоря, на лиспе говорю еще хуже, чем Мутко на аглицком, да и понимаю в нем мало.. скобки только.. ну, что их должно быть одинаково "(" и ")"! Чего этот код делает?
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 25.12.2017, 16:09
#6
Кулик Алексей aka kpblc
Moderator

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


Теоретически то же самое, что и раньше. Просто можно передавать любое имя своего набора или напрямую указатель на созданную коллекцию. В самом начале работы загружаешь лисповой код:
Код:
[Выделить все]
ThisDrawing.SendCommand "(vl-load-com) (defun ss-high (name / ss) (if (and (= (type name) 'str) (= (type (setq ss (vl-catch-all-apply (function (lambda () (vla-item (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) name)))))) 'vla-object)) (progn (setq ss (ssadd)) (vlax-for item ss (ssadd (vlax-vla-object->ename item) ss)) (sssetfirst ss ss))))"
Потом, когда понадобится, вызываешь нечто типа
Код:
[Выделить все]
ThisDrawing.SendCommand "(ss-high ""Светить_всегд_светить_везде"")"
Если набор с таким именем есть, он будет подсвечен.
P.S. Попробовал передавать в лисп напрямую значения переменных из VBA (не поленился, поставил VBA Enabler) - мимо. Так что код исправляю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.12.2017, 16:27
#7
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Теоретически то же самое, что и раньше. Просто можно передавать любое имя своего набора или напрямую указатель на созданную коллекцию. В самом начале работы загружаешь лисповой код:
Код:
[Выделить все]
ThisDrawing.SendCommand "(vl-load-com) (defun ss-high (name / ss) (if (and (= (type name) 'str) (= (type (setq ss (vl-catch-all-apply (function (lambda () (vla-item (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) name)))))) 'vla-object)) (progn (setq ss (ssadd)) (vlax-for item ss (ssadd (vlax-vla-object->ename item) ss)) (sssetfirst ss ss))))"
Потом, когда понадобится, вызываешь нечто типа
Код:
[Выделить все]
ThisDrawing.SendCommand "(ss-high ""Светить_всегд_светить_везде"")"
Если набор с таким именем есть, он будет подсвечен.
P.S. Попробовал передавать в лисп напрямую значения переменных из VBA (не поленился, поставил VBA Enabler) - мимо. Так что код исправляю.
Так проблемы с передачей набора не было, он и так работал (имя явно указывалось, переменная в принципе и не обязательна - в vba набор создал с именем, лиспом - подсветил, используя его же). Проблема в том, что объекты СПДС CS собираются в коллекцию свою, через McCOM2 (которая не имеет отношения к той, что использует лисп в SendCommand) - и объектам этого набора надо либо "позолотить ручки", используя встроенные методы McCOM2 (которых, возможно, и нет), либо оперативно сбросить объекты из него в AcadSelectionSet с заданным именем, который уже и поджечь лиспом..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 25.12.2017, 16:56
#8
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от AlexV Посмотреть сообщение
Проблема в том, что объекты СПДС CS собираются в коллекцию свою, через McCOM2
что мешает объекты СПДС собрать в AcadSelectionSet и позолотить ручки?
соедствами МсСом можно то же подсветить, но подозреваю тебе не это надо
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 25.12.2017, 17:00
#9
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от doctorraz Посмотреть сообщение
что мешает объекты СПДС собрать в AcadSelectionSet и позолотить ручки?
Наверное, то, что через VBA невозможно подсветить примитив, указав его grips'ы. В лучшем случае - Highlight.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.12.2017, 17:18
#10
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от doctorraz Посмотреть сообщение
что мешает объекты СПДС собрать в AcadSelectionSet и позолотить ручки?
соедствами МсСом можно то же подсветить, но подозреваю тебе не это надо
Главным образом, отсутствие понимания, как фильтровать объекты СПДС через SelectionSets. То бишь, к примеру, сия функция может выбрать все параметрические объекты на чертеже или в рамке, но как добавить в фильтр свойства? Ну слой там, цвет и прочие стандартные - добавить можно, а внутренние свойства объектов?

Код:
[Выделить все]
Private Function SelectOnlyOnScreen(str) As AcadSelectionSet
Dim objSelSet As AcadSelectionSet
Dim objSelCol As AcadSelectionSets
Dim intType(0) As Integer
Dim varData(0) As Variant
Set objSelCol = ThisDrawing.SelectionSets
For Each objSelSet In objSelCol
 If objSelSet.Name = "123" Then
  objSelSet.Delete
  Exit For
 End If
Next
Set objSelSet = ThisDrawing.SelectionSets.Add("123")
intType(0) = 0
varData(0) = "SPDSSTANDARDPART" '
If str = "Выбрать объекты" Then
  objSelSet.SelectOnScreen intType, varData
Else
  objSelSet.Select acSelectionSetAll, , , intType, varData
End If
Set SelectOnlyOnScreen = objSelSet
End Function
----- добавлено через ~29 мин. -----
..попытка переписать объекты в AcadSelectionSet не удалась.. Если массив Ssobjs объявлять ака AcadEntity, то ругаемси на несовпадение типов в "Set Ssobjs(I) = spds_col_tmp.Item(I)", если As Object или Variant, - то в "objSelSet.ddItems Ssobjs" "объект не поддерживает данное свойство али метод"..

Код:
[Выделить все]
Dim objSelSet As AcadSelectionSet
Dim objSelCol As AcadSelectionSets
Dim intType(0) As Integer
Dim varData(0) As Variant
Dim Ssobjs() As Object' As AcadEntity 
Set objSelCol = ThisDrawing.SelectionSets
For Each objSelSet In objSelCol
 If objSelSet.Name = "Подсветкой" Then
  objSelSet.Delete
  Exit For
 End If
Next
Set objSelSet = ThisDrawing.SelectionSets.Add("Подсветкой")
    reDim Ssobjs(1 To spds_col_tmp.Count) As Object
    For I = 1 To spds_col_tmp.Count
        Set Ssobjs(I) = spds_col_tmp.Item(I)
    Next I
  objSelSet.ddItems Ssobjs


понимание пришло..
Но, конечно, жаль, что нельзя использовать Query и Select от SPDS.. там было бы проще организовать выделение объектов с нужными свойствами..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!

Последний раз редактировалось AlexV, 25.12.2017 в 18:20.
AlexV вне форума  
 
Непрочитано 25.12.2017, 19:06
#11
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


не жаль у AcadSelectionSet возможностей больше
в плане выборки объектов по фильтрам...
Query ищет только по листу или модели
а AcadSelectionSet может по всему документу.... недостаток всего один из него недоступны свойства спдс... но в этом случае они и не нужны
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 26.12.2017, 11:17
#12
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от doctorraz Посмотреть сообщение
не жаль у AcadSelectionSet возможностей больше
в плане выборки объектов по фильтрам...
Query ищет только по листу или модели
а AcadSelectionSet может по всему документу.... недостаток всего один из него недоступны свойства спдс... но в этом случае они и не нужны
Ну, во-первых, мне как раз они и нужны - свойства параметрических объектов, по ним фильтровать выбор. А во-вторых, почему недоступны? Доступны вроде.. По-крайней мере, я методом интуитивного тыка отредактировал свою функцию вот так:

Код:
[Выделить все]
Private Function SelectOnlyOnScreen(str) As AcadSelectionSet
Dim objSelSet As AcadSelectionSet
Dim objSelCol As AcadSelectionSets
Dim intType(8) As Integer
Dim varData(8) As Variant
Set objSelCol = ThisDrawing.SelectionSets
For Each objSelSet In objSelCol
 If objSelSet.Name = "Подсветка" Then
  objSelSet.Delete
  Exit For
 End If
Next
Set objSelSet = ThisDrawing.SelectionSets.Add("Подсветка")
intType(0) = 0 '
varData(0) = "SPDSSTANDARDPART" '
intType(1) = 301 '
varData(1) = "strTheType"
intType(2) = 300 '301 .
varData(2) = "Арматура"
intType(3) = 301 '
varData(3) = "KONSTR"
intType(4) = 300  '
varData(4) = "Фм1"
intType(5) = 301 '
varData(5) = "sForm_St"
intType(6) = 300  
varData(6) = "Г,П"
intType(7) = 301
varData(7) = "D"
intType(8) = 40 
varData(8) = "16"
If str = "Выберите объекты" Then
  objSelSet.SelectOnScreen intType, varData
Else
  objSelSet.Select acSelectionSetAll, , , intType, varData
End If
Set SelectOnlyOnScreen = objSelSet
podsvetko
End Function

Private Sub podsvetko()
Dim p As String
p = "(progn(defun ss-gripset (/ SS SR SSN I)(vl-load-com)(setq SS(vla-get-selectionsets(vla-get-activedocument (vlax-get-acad-object))) SSN(vla-item SS ""Подсветка"") SR(ssadd))(vlax-for I SSN (ssadd(vlax-vla-object->ename I)SR))(sssetfirst nil SR)(princ))(ss-gripset))\n "
ThisDrawing.SendCommand (p)
End Sub
..И она замечательным образом выделяет все SPDSSTANDARDPART с strTheType="Арматура", KONSTR="Фм1" и sForm_St="П" либо "Г". Ну то бишь, в моем конкретном случае, параметрические объекты, изображающие собой арматурные стержни формы "П" и "Г" , принадлежащие конструкции "Фм1".
Я опасался, что будет тормозить по-сравнению с Query, - ан нет, работает с той же скоростью, пара секунд на обработку порядка 3000 объектов.

Прояснить бы еще пару моментов.. Не совсем пока понятно, как работает фильтр, и как зависит его работа от расположения имен и значений свойств в массивах varData, intType. Со строковыми значениями - все окей, - все нужные значения задаешь через запятую.. А вот числовые, вроде диаметра - непонятно - можно ли задать несколько вариантов значений, либо диапазон.. Потом, логику работы фильтра недовкурил - то он взаимоисключает объекты (то бишь, если задана "форма П" и "диаметр 16", то он ищет строго п-шки 16 диаметра. Если же задать несколько вариантов значений формы (sForm_St) - то в выборку попадают объекты с разным значением диаметра, хотя задано так же D=16.

А еще - хотелось фильтрацию осуществлять по критериям, заданным пользователем - соответственно, с разным количеством их в запросе. И не понятно пока - на каждый случай писать отдельную функцию с нужным количеством значений в массивах intType(..) As Integer, varData(..) As Variant? Динамическими их жеж вроде нельзя объявить..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!

Последний раз редактировалось AlexV, 26.12.2017 в 11:23.
AlexV вне форума  
 
Непрочитано 26.12.2017, 12:02
#13
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от AlexV Посмотреть сообщение
Ну слой там, цвет и прочие стандартные - добавить можно, а внутренние свойства объектов?
легко
Код:
[Выделить все]
Dim ThisDraw           As Object ' AcadDocument
Sub Main()
Dim intType(2) As Integer
Dim varDat(2)  As Variant
Dim objSelSet  As Object ' AcadSelectionSet


180     Set objApp = GetObject(, "AutoCAD.Application")
190     Set ThisDraw = objApp.ActiveDocument
250     intType(0) = 0 'параметрика стандартная
          intType(1) = 40 ' диаметр трубы
          intType(2) = 8 'слой
260     varDat(0) = "SPDSSTANDARDPART" 'параметрика стандартная
          varDat(1) = 25 ' диаметр трубы
          varDat(2) = "ЭС_ТРУБЫ" 'слой
270     Set objSelSet = vbdPowerSet("seTEST")
'<***********Ищем **************>
280     objSelSet.Select 5, , , intType, varDat
          podsvetkoy
End Sub

Sub podsvetkoy()
Dim p As String
p = "(progn(defun ss-gripset (/ SS SR SSN I)(vl-load-com)(setq SS(vla-get-selectionsets(vla-get-activedocument (vlax-get-acad-object))) SSN(vla-item SS ""seTEST"") SR(ssadd))(vlax-for I SSN (ssadd(vlax-vla-object->ename I)SR))(sssetfirst nil SR)(princ))(ss-gripset))\n) "
ThisDraw.SendCommand (p)
End Sub


'чистим/добавляем SelectionSets
Public Function vbdPowerSet(strName As String) As Object 'AcadSelectionSet
Dim objSelSet As Object ' AcadSelectionSet
Dim objSelCol As Object ' AcadSelectionSets
100     Set objSelCol = ThisDraw.SelectionSets
110     For Each objSelSet In objSelCol
120         If objSelSet.Name = strName Then
130             objSelSet.Delete
                Exit For
            End If
        Next
140     Set objSelSet = ThisDraw.SelectionSets.Add(strName)
150     Set vbdPowerSet = objSelSet
End Function
посмотреть внутреннее свойство объекта СПДС и его индекс можно этой командой
(entGET(CAR(entSEL))) (не спрашивай меня, что это такое, сам не знаю))))
ввести это в ком строку АК и кликнуть по интересующему объекту, АК вывалит в консоль

Код:
[Выделить все]
Выберите объект: ((-1 . <Имя объекта: 7ff6e9406a00>) (0 . "SPDSSTANDARDPART") (330 . <Имя объекта: 7ff6e94061f0>) (5 . "290") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "ЭС_ФОРМАТЫ") (100 . "SPDSSTANDARDPART") (100 . "SPDSSTANDARDPART") (90 . 1) (301 . "Name") (300 . "Труба ГКРПХ 25 x 2.5# C1 ГОСТ 167-69") (301 . "Info") (300 . "Труба ГКРПХ 25 x 2.5# C1 ГОСТ 167-69") (301 . "Scale") (40 . 1.0) (301 . "DimScale") (40 . 1.0) (301 . "ZOrder") (40 . 100.0) (301 . "CutAcElements") (90 . 1) (301 . "strTheType") (300 . "Tube") (301 . "strTheName") (300 . "GOST 167-69") (301 . "strTheSubType") (300 . "Round") (301 . "strURL") (300 . "normacs://normacs.ru/JAT") (301 . "L") (40 . 498.674) (301 . "B") (40 . 25.0) (301 . "s") (40 . 2.5) (301 . "strStandard") (300 . "ГОСТ 167-69") (301 . "StandardMaterial") (300 . "ГОСТ 3778-98") (301 . "strDesignation") (300 . "{\\rtf1\\ansi\\ansicpg1251\\deff0\\deflang1049\\viewkind4\\uc1\\pard \\u1058?\\u1088?\\u1091?\\u1073?\\u1072? \\up4\\fs13 25x2.5 \\u1043?\\u1054?\\u1057?\\u1058? 167-69\\up0\\fs17|\\dn4\\fs13 C1 \\u1043?\\u1054?\\u1057?\\u1058? 3778-98\\up0\\fs17  L=498\\par}") (301 . "rfName") (300 . "Труба") (301 . "rfPosition") (300 . "1") (301 . "rfComment") (300 . "") (301 . "rfType") (300 . "Трубы") (301 . "strMaterial") (300 . "C1") (301 . "rfTypeKM") (300 . "PartMR") (301 . "ti") (40 . 0.0) (301 . "sostojanie") (40 . 0.0) (301 . "massa") (40 . 1.19682) (301 . "mas1") (40 . 2.4) (301 . "Designation") (300 . "25x2.5") (301 . "rInsertOffset") (40 . 27.5) (301 . "strSection") (300 . "? 25x2.5") (301 . "rdE1") (40 . 25.0) (301 . "rdE2") (40 . 25.0) (301 . "rS1") (40 . 2.5) (301 . "rS2") (40 . 2.5) (301 . "lSimpleView") (40 . 0.0) (301 . "ObjectDescription") (300 . "Трубы свинцовые ГОСТ 167-69") (301 . "SpecPartition") (300 . "") (301 . "strPartDescription") (300 . "") (301 . "Origin point X:") (40 . -675.308) (301 . "Origin point Y:") (40 . 1131.93) (301 . "Origin point Z:") (40 . 0.0) (301 . "MCSUID") (300 . "4ECCB48334BD2F78") (301 . "DimScale") (40 . 1.0) (301 . "PrmCodes") (300 . "0:99") (301 . "ImplName") (300 . "Implementation 1") (301 . "McView") (300 . "Спереди") (301 . "UZRotate") (40 . 0.596175))

дальше надеюсь понятно.
Что интересно, этот код будет работать даже без спдса, достаточно загруженного mcsEnabler.dbx СПДС энаблера

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от AlexV Посмотреть сообщение
А во-вторых, почему недоступны? Доступны вроде..
имелось в виду, что из vb через объектную модель АК, ты не сможешь прочитать внутреннее свойство объекта СПДС или его изменить. только через МсСОМ
а вот лисп может, но я его не умею(((
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 26.12.2017, 12:13
#14
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от doctorraz Посмотреть сообщение
легко
посмотреть внутреннее свойство объекта СПДС и его индекс можно этой командой
(entGET(CAR(entSEL))) (не спрашивай меня, что это такое, сам не знаю))))
дальше надеюсь понятно.
Что интересно, этот код будет работать даже без спдса, достаточно загруженного mcsEnabler.dbx СПДС энаблера
doctorraz, эту собаку я уже раскопал.. постом выше я о том же распространялся.. Вопрос теперь - во-первых, - как задавать диапазоны или списки значений для числовых полей.. во-вторых, логика выбора не до конца мне понятна - то выбирает "как надо", то - объединяет, а не взаимоисключает наборы.. В-третьих, - можно ли обращаться к функции с разным значением условий выбора, или надо для каждого случая отдельную функцию рожать..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 26.12.2017, 12:19
1 | #15
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от AlexV Посмотреть сообщение
В-третьих, - можно ли обращаться к функции с разным значением условий выбора, или надо для каждого случая отдельную функцию рожать..
можно
Код:
[Выделить все]
Dim intType

'а потом когда надо условия
ReDim intType(2) As Integer
'........
ReDim intType(20) As Integer
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 26.12.2017, 14:51
#16
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от doctorraz Посмотреть сообщение
имелось в виду, что из vb через объектную модель АК, ты не сможешь прочитать внутреннее свойство объекта СПДС или его изменить. только через МсСОМ
а вот лисп может, но я его не умею(((
это, конечно, дело чуть усложняет.. Ну да ладно.. Выделение объектов - будет реализовано через AcadSelectionSet. Фактически, хочу получить аналог родного фильтра СПДС, заточенный на свои объекты (без "лишнего" и в немодальной форме). Ну то бишь, - что б в пару кликов можно было выделить арматуру с определенными свойствами (диаметр, длина, форма стержня, привязка к конструкции и т.д.). А менять свойства - можно и через окно свойств автокада (главное, что бы в скриптах объектов согласованность была в именах и т.д.).
А вот создание спецификаций и "массовое изменение свойств" придется через МсСОМ делать..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 27.12.2017, 15:24
1 | #17
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,293
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от AlexV Посмотреть сообщение
это, конечно, дело чуть усложняет..
похоже, что нет
-------------
Цитата:
Пример получения объекта McCOM2 из объекта Автокада
Код:
[Выделить все]
Sub AK_VS_SPDS()
Dim returnObj As AcadObject 'объект АК
Dim pObjMC 'объект СПДС

    Set pServer = GetObject("", "McCOM2.Server")
    ThisDrawing.Utility.GetEntity returnObj, Null, "Выберите объект"
    Set pObjMC = pServer.Object(returnObj) 'передали объект АК в СПДС

End Sub
----- добавлено через ~1 ч. -----
Теперь у меня вопрос)))
Собрал я по фильтру селсетом объекты (пусть это будут отрезки) по всему документу (с модели и листов)
и вот например, надо мне посчитать суммарные длины отрезков на каждом листе и в модели по отдельности.
Есть "гуманный" способ определения принадлежности объекта пространству модели или листа?
На бэйсике
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 27.12.2017 в 16:38.
doctorraz вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Прочее. Программное обеспечение > ПО от CSoft > СПДС 10 VBA. Как выделить/подсветить набор объектов СПДС, входящих в коллекцию?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ACAD+СПДС Железобетон (nanoCAD СПДС Железобетон) swell{d} Прочее. Программное обеспечение 104 04.12.2015 09:30
СПДС GraphiCS. Глюки с отметками уровней при растяжении объектов. VAV ПО от CSoft 4 16.10.2014 11:35
AutoCAD 2012 + СПДС 7.0.938 - пропадает панель масштаба СПДС prog_mike Прочее. Программное обеспечение 8 18.11.2011 13:27
Civil 3D и СПДС GraphiCS: правильное отображение отметок уровня (да и, в-общем, всех объектов) qwer Вертикальные решения на базе AutoCAD 2 07.11.2011 22:00
СПДС 7.0 не подгружается под автокад 2011 solovey_9lo Вертикальные решения на базе AutoCAD 3 18.05.2011 06:29