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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp \ VBA Вставить все блоки с шагом по линии

Lisp \ VBA Вставить все блоки с шагом по линии

Ответ
Поиск в этой теме
Непрочитано 11.03.2011, 09:10 #1
Lisp \ VBA Вставить все блоки с шагом по линии
gizmo_zx
 
Проектировщик ЭО,ЭМ, ЭОС
 
Нижний Новгород
Регистрация: 18.07.2007
Сообщений: 257

Добрый день.
Подскажите как вставить все блоки содержащиеся в текущем файле в модель.
Вставить горизонтально по линии с определенным шагом (например 1000).
Атрибуты заполнить значениями "по умолчанию" (не очень важно).
Цель отобразить все блоки, какие есть в файле.
Можно Lisp, но лучше на VBA.
Просмотров: 3036
 
Непрочитано 11.03.2011, 09:19
#2
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


А простой DesignCenter не устраивает?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 11.03.2011, 09:34
#3
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Не совсем. это надо каждый щелкнуть и вставить. А блоков несколько сотен.
gizmo_zx вне форума  
 
Непрочитано 11.03.2011, 09:48
#4
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Код:
[Выделить все]
Public Sub InsBlocks()
   Dim blItem As AcadBlock
   Dim pt(0 To 2) As Double
   Dim iCol As Integer
   
   For Each blItem In ThisDrawing.Blocks
      If Not blItem.IsLayout Then
         ThisDrawing.ModelSpace.InsertBlock pt, blItem.Name, 1, 1, 1, 0
         pt(0) = pt(0) + 1000
         iCol = iCol + 1
         If iCol = 10 Then
            pt(1) = pt(1) - 1000
            pt(0) = 0
            iCol = 0
         End If
      End If
   Next
End Sub
Vildar вне форума  
 
Непрочитано 11.03.2011, 09:49
#5
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


стёр

Последний раз редактировалось Boxa, 11.03.2011 в 09:51. Причина: уже ответили
Boxa вне форума  
 
Автор темы   Непрочитано 11.03.2011, 10:13
#6
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


А можно указать папку с файлами и из всех файлов вытащить в один и выстроить также в линию. Буду просто счастлив!!!
gizmo_zx вне форума  
 
Непрочитано 11.03.2011, 10:31
#7
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Это шутка чтоли?
Vildar вне форума  
 
Непрочитано 11.03.2011, 10:37
#8
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


gizmo_zx, вот скажи - зачем тебе все это? Конечная цель какова?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 11.03.2011, 10:45
#9
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Есть около 100 файлов в них в каждом около 100 блоков.
Нужно визуально найти примерно 10 блоков, т.к. есть только фотка в брошуре, нужны габаритные размеры. Вот их то из блоков хочу достать.
gizmo_zx вне форума  
 
Непрочитано 11.03.2011, 10:47
#10
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Я бы работал через палитры инструментов. Намного более удобное средство, мне кажется.
Offtop: Как полное извращение: все объединить в один файл и создать на его основе палитру инструментов.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 11.03.2011, 10:50
#11
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


мне это разово (надеюсь). проблемма открыть сто файлов и просмотреть каждый блок.
как объединить все файлы в один?
gizmo_zx вне форума  
 
Непрочитано 11.03.2011, 10:52
#12
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Через _.insert, например.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 11.03.2011, 10:57
#13
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


через _.insert можно выбрать 1 файл. А разом можно. Offtop: Да я такой
gizmo_zx вне форума  
 
Непрочитано 11.03.2011, 11:01
#14
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Через _.xref вставить сколько надо, потом разбить связь (bind).
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 11.03.2011, 11:04
1 | #15
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Код:
[Выделить все]
Public Sub InsBlocks()
   Dim blItem As AcadBlock
   Dim doc As Object
   Dim text As AcadText
   Dim ents(0) As Object
   Dim pt(0 To 2) As Double
   Dim iCol As Integer
   Dim sDir As String
   Dim sValue As String
   Dim sFile As String
   Dim sDbxVer As String
   
   On Error GoTo HasError
    
   sDbxVer = "ObjectDBX.AxDbDocument." & CInt(Val(Application.Version))
   Set doc = Application.GetInterfaceObject(sDbxVer)
   
   ' Путь к папке с блоками
   sDir = "d:/Blocks/"
   
   ' Перебираем файлы в папке, без учета подкаталогов
   sValue = Dir(sDir + "/*.dwg")
   Do While sValue <> ""
      sFile = sDir + sValue
      doc.Open sFile
      
      pt(0) = 0
      pt(1) = pt(1) - 1000
      Set text = ThisDrawing.ModelSpace.AddText(sFile, pt, 100)
      pt(1) = pt(1) - 1000
      
      For Each blItem In doc.Blocks
         If Not blItem.IsLayout Then
            Set ents(0) = blItem
            doc.CopyObjects ents, ThisDrawing.Blocks
            ThisDrawing.ModelSpace.InsertBlock pt, blItem.Name, 1, 1, 1, 0
            pt(0) = pt(0) + 1000
            iCol = iCol + 1
            If iCol = 10 Then
               pt(1) = pt(1) - 1000
               pt(0) = 0
               iCol = 0
            End If
         End If
      Next
      
      sValue = Dir()
   Loop
End
   
HasError:
   MsgBox Err.Description
   
End Sub

Измени путь к папке с блоками.
Вложенные папки не обрабатываются.
Блоки с одинаковыми именами в разных файлах не обрабатываются. Определяется только блок из первого файла. По идее, нужно проверять нет ли уже блока с таким именем и добавлять рандомное число к имени блока, или еще как. Может сам доделаешь.
Изменил код. Сделал позднее связывание с DBX.

Последний раз редактировалось Vildar, 11.03.2011 в 12:04.
Vildar вне форума  
 
Непрочитано 13.03.2011, 02:09
#16
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
проблема открыть сто файлов и просмотреть каждый блок.
Если не для 100 файлов, то может пригодиться программа DNO (Drawing_Named_Objects, комплекс KAI-2001, системные программы).
Значения атрибутов заменяются на TAGи.
Для блоков кроме имени выводится также количество объектов в блоке, количество атрибутов и имена слоев, на которых определены объекты.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp \ VBA Вставить все блоки с шагом по линии



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли возможность вставить в вершины полилинии блоки? bimari AutoCAD 29 04.06.2021 14:49
Selection set на блоки по значению атрибута (VBA) Pitonio Программирование 6 24.09.2010 00:28
Разбиение черечежа откоса на геологические блоки в VBA Skyper Программирование 1 18.03.2010 08:54
Как генерировать блоки с атрибутами в пространстве модели(листа) при помощи LISP!!! SpillOver LISP 27 08.01.2010 21:36
Как вставить блоки по направлению полилинии (VBA) dorofei Программирование 5 27.11.2006 06:50