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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как скопировать блоки из одного чертежа в другой

Как скопировать блоки из одного чертежа в другой

Ответ
Поиск в этой теме
Непрочитано 11.02.2010, 11:59 #1
Как скопировать блоки из одного чертежа в другой
молод и перспективен
 
Регистрация: 05.07.2009
Сообщений: 18

Как скопировать коллекцию блоков из одного файла (зная его местонахождения на жестком) в активный документ. С помощью ВБА
Просмотров: 4799
 
Непрочитано 11.02.2010, 13:32
#2
Кулик Алексей aka kpblc
Moderator

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


См.справку по методу InsertBlock. Ну или ObejctDBX в руки и вперед...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2010, 14:04
#3
Roman3R


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


DesignCenter
Roman3R вне форума  
 
Непрочитано 11.02.2010, 14:51
#4
Кулик Алексей aka kpblc
Moderator

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


Roman3R, ты раздел-то смотрел?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2010, 20:22
#5
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от молод и перспективен Посмотреть сообщение
Как скопировать коллекцию блоков из одного файла (зная его местонахождения на жестком) в активный документ. С помощью ВБА
Мона так

Код:
[Выделить все]
Option Explicit

'' Copy block definitions from other drawing
'' written by Fatty T.O.H. (c) 2006
'' All rights removed, feel free to change to your suit
'' ShowOpen dialog written by Sccaddmember, see this thread:
'' http://discussion.autodesk.com/thread.jspa?threadID=489202

'' require reference to AutoCAD/ObjectDBX Common XX.0 Type Library

Dim oDbx As New AxDbDocument
Dim fname As String
Dim sBlkName As String
Dim OutputStr As String
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                                         "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type


Private Function ShowOpen(Filter As String, _
                         InitialDir As String, _
                         DialogTitle As String) As String
    Dim OFName As OPENFILENAME
    'Set the structure size
    OFName.lStructSize = Len(OFName)
    'Set the owner window
    OFName.hwndOwner = 0
    'Set the filter
    OFName.lpstrFilter = Filter
    'Set the maximum number of chars
    OFName.nMaxFile = 255
    'Create a buffer
    OFName.lpstrFile = Space(254)

    'Create a buffer
    OFName.lpstrFileTitle = Space$(254)
    'Set the maximum number of chars
    OFName.nMaxFileTitle = 255
    'Set the initial directory
    OFName.lpstrInitialDir = InitialDir
    'Set the dialog title
    OFName.lpstrTitle = DialogTitle
    'no extra flags
    OFName.flags = 0
    'Show the 'Open File' dialog
    If GetOpenFileName(OFName) Then
        ShowOpen = Trim(OFName.lpstrFile)
    Else
        ShowOpen = ""
    End If
End Function


Public Sub CopyBlocksFormOutside()

    Dim Filter As String

    Dim InitialDir As String

    Dim DialogTitle As String

    Filter = "Drawing Files (*.dwg)" + Chr$(0) + "*.dwg" + Chr$(0) + _
             "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0)

    InitialDir = ThisDrawing.Path

    DialogTitle = "Open a DWG file"

    OutputStr = ShowOpen(Filter, InitialDir, DialogTitle)

    fname = OutputStr

    CopyBlocks (fname)

End Sub



Private Sub CopyBlocks(fname As String)

    Set oDbx = GetInterfaceObject("ObjectDBX.AxDbDocument." & Left(ThisDrawing.GetVariable("acadver"), 2))

    oDbx.Open fname

    Dim oBlocks As AcadBlocks

    Dim oBlock As AcadBlock

    Dim copyVar() As AcadBlock

    Set oBlocks = oDbx.Blocks

    Dim i As Integer

    i = -1

    On Error GoTo HoustonWeHaveAProblem

    For Each oBlock In oBlocks

        If Not oBlock.IsXRef And Not oBlock.IsLayout And Not oBlock.Name Like "*,*|*" Then

            i = i + 1

            ReDim Preserve copyVar(i) As AcadBlock

            Set copyVar(i) = oBlock

        End If

    Next

    Dim idPairs As Variant

    Dim copyObj As Variant

    On Error Resume Next

    copyObj = oDbx.CopyObjects(copyVar, ThisDrawing.Blocks, idPairs)

    If Err Then

        Err.Clear

    End If

    On Error GoTo 0

    Set oDbx = Nothing

HoustonWeHaveAProblem:

    If Err.Number <> 0 Then

        MsgBox "ObjectDBX CopyObjects method objects failed." & vbCr & Err.Number & " " & Err.Description, vbCritical

    End If

End Sub
~'J'~
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как скопировать блоки из одного чертежа в другой



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как именно настроить параметры нового чертежа? Макс_Северянин AutoCAD 31 01.09.2010 10:16
Перемещение вкладок со всем содержимым из одного файла в другой. Нужен лисп. scatler LISP 2 10.11.2009 13:44
Как перегнать векторный чертеж dwg из Автокада в pdf, jpeg или другой растр? (вопрос из FAQ) Marv AutoCAD 1 28.09.2008 14:28
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16