Тема: Можно ли добавить layout по шаблону?

Нужно чтобы я добавлял закладку по шаблоку. Шаблон мне уже Известен, т.е. не нужно чтобы пользоваетель мне её указываль. Нужно чтобы он тоьлко нажал кнопку типа "Добавить такой-то лист". И не болела у него голова где лежит шаблон и т.д.

Re: Можно ли добавить layout по шаблону?

Посмотрите здесь:
http://www.cad.dp.ua/stats/a_vba/acobje … yOutsample
При желаниии разберетесь.

Re: Можно ли добавить layout по шаблону?

Спасибо за совет, я пробовал сам через буфер обмена с помощью SendCommand.
copybase
pasteclip.
Твой вариант мне нравится, но...
я шаблон храню как обычный dwg файл. Открываю его программно, копирую через буфер содержимое нужной закладки файла-шаблона, добавляю в рабочем чертеже новую закладку, вставляю содержимое буфера.
"твоя" процедура CopyObjects в данном случае не действует, она копирует объекты только в пределах чертежа. Между двумя чертежами уже не получается. Дай Бог, чтобы я был не прав.

Re: Можно ли добавить layout по шаблону?

Конечно Вы не правы. Какая разница откуда и куда копировать объекты, в пределах одного чертежа или из одного чертежа в другой? Полностью код приводить не буду, уж извините. Алгоритм следующий:
1. Создаем новый файл на основе шаблона (файл с расширением dwt), содержащего нужный лист. Например:

Dim templateDoc As AcadDocument
Dim acadDoc As AcadDocument
Set acadDoc = AutoCAD.Application.ActiveDocument
Set templateDoc = AutoCAD.Application.Documents.Add("C:\Program Files\AutoCAD 2000i\Template\Шаблон1.dwt")

2. Т. к. после п. 1 активным будет новый чертеж, делаем активным "старый".

acadDoc.Activate

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

Dim objLayout As AcadLayout
Dim objNewLayout As AcadLayout
Dim objEnt As AcadObject
Dim objEntArray() As AcadObject
For Each objLayout In acadDoc.Layouts
    If objLayout.name = strTo Then
        acadDoc.Layouts.Item(strTo).Delete
        Exit For
    End If
Next
Set objNewLayout = acadDoc.Layouts.Add(strTo)
Set objLayout = templateDoc.Layouts.Item(strFrom)
ReDim objEntArray(0 To objLayout.Block.Count - 1) As AcadObject
For Each objEnt In objLayout.Block
    Set objEntArray(i) = objEnt
    i = i + 1
Next

4. Ну и наконец собственно копирование надписей, линий, видовых экранов и т. д. и т. п.

templateDoc.CopyObjects objEntArray, objNewLayout.Block
objNewLayout.CopyFrom objLayout
acadDoc.Regen acActiveViewport

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

templateDoc.Close

Приблизительно вот так.

Re: Можно ли добавить layout по шаблону?

> bender
Да ты прав. Все прекрасно создается и копируется как ты говоришь. Спасибо.
А как скопировать объекты из пространста модели одного чертежа в пространство модели другого открытого чертежа? Это по последнему твоему ответу, так сказать развивая тему.
templateDoc.CopyObjects objEntArray, objNewLayout.Block
Что здесь нужно поменять?
Думаю примерно так, но не получается
templateDoc.CopyObjects objEntArray, acadDoc.ModelSpace

Re: Можно ли добавить layout по шаблону?

> Павел
А что конкретно не получается? Может все таки получается? Или какой-то из doc-ов не определен? А еще посмотрите https://www.caduser.ru/forum/topic4406.html

Re: Можно ли добавить layout по шаблону?

> bender
Все нормально.
Кое что перепутал у себя.
А строка templateDoc.CopyObjects objEntArray, acadDoc.ModelSpace
выходит правильно написана.