Перейти к содержанию

Рекомендуемые сообщения

К сожалению после прочтения справки по 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 есть рабочий боевой пример и их не затруднит любезно поделиться.

Изменено пользователем raz
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

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

Ссылка на сообщение
Поделиться на другие сайты

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

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 (координаты, размеры, вес)))

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Где можно найти хелп по mcCom2.dll?

тут

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

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

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

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

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

Как программно (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

 

Изменено пользователем doctorraz
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Расскажите друзьям

    Нравится Официальный форум компании Нанософт? Расскажите друзьям!
  • Похожий контент

    • От MCAD
      Попытался ответить на вопросы по управлению "Элементами управления" пользовательской формы,  которые наиболее часто встречаются у пользователей.
      Пользовательские формы – универсальный инструмент, использующийся в:
       «Стандартных» объектах БД (spsmaster - Мастер объектов); Универсальных маркерах - spcreateumarker - Создать маркер;  Шаблонах объектов -sptwiz ( в том числе блоков платформы);  Группах (spgroupobjects); Таблицах.
      Под роликом есть легенда. 
      Тело документа: 
      Hidden form control.zip
    • От A.Kudrjashov
      Хотелось бы всё-таки понять:

      Исчезновение автонумерации в Форматах при переходе nanoCAD Plus от версии 20.0 к версии 20.1 - это принципиальное решение или недоразумение ?
      И, если это принципиальное решение, то каковы мотивы ?
      В официальных уроках, рекламируемых и выложенных на сайте, на этом функционале принципиально акцентируется внимание.
       
       
    • От Spirin
      Урок №1. Оформление чертежей
      https://ftp.nanosoft.su/file_16482086965ea19c7ddd494

      Урок №2. Работа с архитектурой
      https://ftp.nanosoft.su/file_19609632745e9051ee2536a

      Урок №3. Создание собственных объектов. Часть 1
      https://ftp.nanosoft.su/file_1311209115ea1a58122fbf

      Урок №4. Создание собственных объектов. Часть 2
      https://ftp.nanosoft.su/file_9209785775e9d824fc92dc
    • От Андрей Х
      Учусь по замечательной статье  Дмитрия Руденко habr.com/ru/post/238867 про Nanocad и VBA работать с Нанокадом.
       
      Столкнулся с такой проблемой.
      Отлично работает имитация ввода простых команд в командную строку, например
      ThisDrawing.SendCommand «CIRCLE» & vbCr & «100,100,0» & vbCr & «1000» & vbCr

      Но как работать с командами, после которых открываются модальные окна?

      Конкретно, мне нужно выполнить команду «pdfimport». Но после этой команды открывается окно открытия файла (а после него — окно выбора параметров импорта), то есть вариант типа ThisDrawing.SendCommand «pdfimport» & vbCr & file_name & vbCr &…
      не работает.
       
      Возможно, можно как-то выполнить эту процедуру и без командной строки, но такого я тоже не знаю.
       
      Общая задача - импортировать чертежи из множества pdf-файлов. Поэтому этот алгоритм должен выполнятся сам, автоматически, без открытия каких-либо окон.
    • От soi
      Добрый день, помогите разобраться с проблемкой.
      В Nanocad Электро (далее NE) создаю чистый проект, в нем создаю новый план, внешней ссылкой вставляю архитектурный план который создан в Nanocad СПДС,
      версия - изобр.1
      получаю сообщение - изобр.2
      работаю на плане в NE, сохраняю сам план, закрываю план.
      При повторном открытии плана получаю сообщение - изобр 3
      Как видно из него уже ругается на сам NE хотя версия NE - изобр.4 - не менялась - по сему смысл этого сообщения совсем не понятен
      и все бы ничего если бы не возникало иногда необходимости редактировать Архитектурный план в СПДС, при чем если при этом NE открыт то получаем следующее
      после внесения изменений в архитектурный план в СПДС при открытом плане в NE, что бы внесенные изменения отобразились в плане NE нужно обновить внешние ссылки.
      При обновлении внешних ссылок получаем сообщение - изобр.2, а потом иногда у нас происходит крах NE - изобр.5
       
      Пока для себя выбрал следующий алгоритм работы при необходимости внесения изменений в Архитектурку, приходится закрывать NE, вносить все изменения и заново открывать NE. При открытии все изменения подхватываются и нет необходимости обновлять внешние ссылки отдельной командой. При таком подходе NE пока не падал. Но это не очень удобно т.к. отнимает лишнее время на закрытие и открытие проекта и плана.
       





×
×
  • Создать...