Jump to content

Recommended Posts

К сожалению после прочтения справки по McCOM2 остались вопросы :

1. как видно в Locals отладчика VBA : универсальный маркер имеет

: ClassName : "Универсальный маркер" : String

на такой запрос:

Set МаркерСпец = spdsApplication.Query("Универсальный маркер")

в МаркерСпец возвращается некоторое количество объектов

но вот если добавить еще условие выбора по полю маркера

Set МаркерСпец = spdsApplication.Query("Универсальный маркер", "flag=""1""")

то МаркерСпец Nothing

в то же время если сделать выборку по всем объектам чертежа:

Set МаркерСпец = spdsApplication.Query("Object", "flag=""1""")

то запрос возвращает объекты с данным свойством, но согласитесь, это не совсем верно и удобно.

Собственно вопрос к гуру, как правильно выбрать объект по имени класса если класс представлен таким образом?

2. Таблицы и поиск СПДС могут делать выборку по всему документу.

Вопрос возможно ли через Query собрать объекты со всего документа за один проход (без перебора листов, модели)?

3. В справке очень лаконично описан объект BOM, однако заинтересовало, что если его получить и заполнить данными, то возможно производить в нем сортировку и пр.

Вопрос: Как? Возможно у кого то из уважаемых All есть рабочий боевой пример и их не затруднит любезно поделиться.

Edited by raz
Link to comment
Share on other sites

  • 2 weeks later...

По ходу написания скрипта возник еще вопрос.

В McCOM2 есть класс BOM, имеетсе большое подозрение, что он сильно может облегчить жизнь при сортировке и группировке объектов.

К сожалению моих знаний VBA сильно недостаточно и получить этот объект мне не удалось.

Вопрос к Гуру, как получить BOM

Link to comment
Share on other sites

  • 3 weeks later...

2. Таблицы и поиск СПДС могут делать выборку по всему документу.

Вопрос возможно ли через Query собрать объекты со всего документа за один проход (без перебора листов, модели)?

Ответ: тупо перебором всех листов, тормозит конечно при регенерации листов, но пока ничего умнее никто не подсказал

Sub МСсборСоВсехЛистов(SPDS, МаркерСпец)
Dim Layouts As AcadLayouts, Layout As AcadLayout
Dim МаркерСпецTemp As McCOM2.ObjectsCollection
Dim АдресМодели As String
'----------------------------------
'	ThisDrawing.SetVariable "regenmode", 0
Set Layouts = ThisDrawing.Layouts
АдресМодели = ThisDrawing.ActiveLayout.Name '  запоминаем лист где находимся
Set МаркерСпец = SPDS.Query(ОбъектПоиска, УсловияПоиска)  'собираем с текущего
For Each Layout In Layouts
'	добавить
	If Layout.Name <> АдресМодели Then 'проверочка что с него начали, что б с него не собирать
		ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item(Layout.Name)
		Set МаркерСпецTemp = SPDS.Query(ОбъектПоиска, УсловияПоиска)
		If МаркерСпецTemp.Count > 0 Then Set МаркерСпец = МаркерСпец.Or(МаркерСпецTemp) 'разобраться как добавить к коллекции
	End If
Next Layout
ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item(АдресМодели) '	вернемся откуда пришли
'	ThisDrawing.SetVariable "regenmode", 1
End Sub

  • Like 1
Link to comment
Share on other sites

у сервера КОМ есть такой метод:

object.Query ([bstrClasses], [vProps], [rBoundBlock])

rBoundBlock- Необязательный. Значение Variant. Габариты в пространстве чертежа, в которых нужно искать объекты.

вопрос как эти габариты корректно задать???

т.е. такая конструкция

Set Frmt = SPDS.Query("McCOM2.SymFrame")(1)

Set Objs = SPDS.Query("Object", "strTheType=""vaPipe""", Frmt.Bounds)

коректно ищет объекты если точка вставки формата 0,0,0. Стоит сдвинуть ао XY начинаются чудеса.

Значения чего подставляются в rBoundBlock (координаты, размеры, вес)))

Link to comment
Share on other sites

  • 1 month later...
  • 5 months later...

Извините, что апаю тему, но осмелюсь опять задать тот же вопрос, может, что изменилось:

===========================

Каким образом через СОМ собрать объекты СПДС (выноски, маркеры, форматы) со всего документа (модели и листов)?

В быстром выборе СПДС это реализовано кнопками: во всем документе, в текущем листе, в текущем наборе.

Как программно (VB&VBA) реализовать выбор во всем документе?

-----------------

upd 28.11.18

Решено!

например для таблиц СПДС со всего документа.

НО, это работает только в AutoCAD, в платформе нано, метод не поддерживается

 

 

Public ThisDrawing As ObjectSub method_not_implemented_under_this_platform()Dim intType(0) As Integer '(2)Dim varDat(0)  As VariantDim objSelSet  As ObjectDim 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 IfOn 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.CountDim objAK As ObjectDim 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	'работаем с ним дальше	NextEnd SubPublic Function vbdPowerSet(strName As String) As Object 'AcadSelectionSetDim objSelSet As Object ' AcadSelectionSetDim 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 = objSelSetEnd Function

 

Edited by doctorraz
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...