Вставить блок из внешнего dwg
Здравствуйте Уважаемые специалисты NanoCAD!
Подскажите пожалуйста, возможно ли с помощью vba-excel вставить в текущий чертеж блок из внешнего dwg, по аналогии, например, с lisp (см. вложение).
В vba-excel можно вставить блок "InsertBlock" (если он например был выгружен из чертежа командой пблок):
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(InsPoint, Range("A" & i).Value, Range("D" & i).Value, Range("D" & i).Value, Range("D" & i).Value, Range("E" & i).Value)
Но мне нужно вставить определенный блок (по имени) из внешнего dwg с несколькими вставленными в него блоками. Может через "WblockCloneObjects"?
Ответы
-
Следующий фрагмент кода (vba-excel): найти файл dwg через окно - в этом файле после того как найден блок с нужным именем, запускается команда "пблок", затем нужно как-то вставить из этого файла (WBlock_example.dwg) блок в текущий чертеж?
Dim myBlock As AcadBlockReference
Dim oEnt As AcadEntity
Dim sourceObj As Object
Dim Sset As nanoCAD.SelectionSetDim activeDoc As nanoCAD.Document
Set activeDoc = acadApp.ActiveDocumentStartF = "C:"
Set App = CreateObject("Excel.Application")
With App.FileDialog(3)
.AllowMultiSelect = False
.Title = "Выбрать файл с блоком"
.Filters.Clear
.Filters.Add "Файлы чертежей", ".dwg;.dwt", 1
.InitialFileName = StartF
.InitialView = 2If .Show = 0 Then
MsgBox "Файл не выбран."
Else
For lf = 1 To .SelectedItems.Count
Set awCopy = acadApp.Documents.Open(.SelectedItems(lf))For Each oEnt In awCopy.ModelSpace
If TypeOf oEnt Is AcadBlockReference Then
Set myBlock = oEnt
If UCase(myBlock.EffectiveName) = UCase(blockname) Then
Set sourceObj = myBlock
Exit For
End If
End If
Next oEnt
If VarType(sourceObj) <> vbEmpty ThenSet Sset = awCopy.SelectionSets.Add("WBLOCKSET")
Sset.AddItems sourceObj
awCopy.Wblock "C:\temp\WBlock_example.dwg", Sset
Sset.DELETEactiveDoc.Activate
0 -
Задачу вроде бы решила: получаю с помощью ПБЛОК блок (отдельно) во внешнем файле dwg (не выбранное, а только блок), затем выполняю вставку блока из этого внешнего файла.
0 -
ИМХО сложновато. Значительно проще было бы "типа вставить" файл библиотеки, а потом уже вставлять блок из библиотеки. Общими мазками, без конкретики и просмотра кода (на VBA у меня, можно сказать, аллергия ;)), алгоритм может быть такой:
- Пройтись по таблице блоков на предмет "есть ли такой блок в чертеже". Если есть - вставляем и на выход
- Через метод .Insert пространства модели вставляем сторонний файл - весь, целиком. Запоминаем результат вставки
- Удалить вставку блока "библиотеки"
- См. первый шаг.На лиспе я подобное делал, когда про ObjectDBX был ни сном ни духом. Если что, ObjectDBX в NC23/23.1 не поддерживается, насколько я знаю.
0
Разделы
- Все разделы
- 57 Общие вопросы
- 52 Работа nanoCAD в ОС Linux
- 407 Платформа nanoCAD
- 16 nanoCAD GeoniCS
- 87 nanoCAD BIM Строительство
- 42 nanoCAD Механика PRO
- 56 nanoCAD BIM Электро
- 11 nanoCAD BIM Вентиляция
- 13 nanoCAD BIM ВК
- 3 nanoCAD BIM Отопление
- 7 nanoCAD BIM СКС
- 51 nanoCAD BIM ОПС
- 2 nanoCAD Стройплощадка
- 3 nanoCAD Металлоконструкции
- 2 nanoCAD Конструкции PS
- 4 TDMS Фарватер
- 1 Облака точек
- NSR Specification
- Учебным заведениям и учащимся
- 7 nano360