Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> копирование блока из файла в файл AutoCAD 
:(
    Опции темы
EEEEEE
Дата 19.3.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



Добрый, Всем!

Подскажите, пожалуйста.
Как скопировать блок из файла в файл AutoCAD средствами автоматизации? 

PM MAIL   Вверх
de_Nis
Дата 20.3.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старательный
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 19.10.2006
Где: Молдова

Репутация: нет
Всего: 6



Немного поконкретнее, пожалуйста.
Из какого файла копировать блок? Что из себя представляет блок, который нужно скопировать?
--------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет…
PM   Вверх
EEEEEE
Дата 20.3.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



Программа собрана на Builder. Открываем 1 файл с готовыми блоками условных значков. Окрываем 2-й чистый файл и активизируем его. С ним что-то делаем. В нужные точки нужно вставить блоки и з 1-го файла. Может кто чего подскажет? InsertBlock работает только на листе где блок раположен изначально.
PM MAIL   Вверх
de_Nis
Дата 23.3.2009, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старательный
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 19.10.2006
Где: Молдова

Репутация: нет
Всего: 6



1) Что значит "Программа собрана на Builder."?
2) Для работы с разными файлами Автокада применяется другие команды. В первом файле выполняем команду "_copyclip" и указываем нужный блок (блоки), во втором файле выполняем команду "_pasteclip" и вставляем выбранный блок (блоки). 
Правда, нужно в блоке правильно задать точку вставки. По-моему, при такой вставке блока базовой точкой является нижний левый угол блока, а не базовая точка, определенная при создании блока. То есть если блок - окружность, для которой обычно базовой точкой задают ее центр, то при вставке "_pasteclip" точкой вставки будет нижний левый угол квадрата, описанного вокруг окружности. 
--------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет…
PM   Вверх
EEEEEE
Дата 23.3.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



Пользовательская программа дейтсвительно собрана на Builder с применением средств автоматизации.

На сколько понимаю приведён код Lisp.

Разговор же о том, чтобы сделать тоже самое только с учётом возможностей серверов автоматизации.
PM MAIL   Вверх
de_Nis
Дата 24.3.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старательный
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 19.10.2006
Где: Молдова

Репутация: нет
Всего: 6



Возможно, в Лиспе тоже есть такие команды - не знаю, Лисп не изучал. 
С Автокадом можно взаимодействовать из внешней программы, используя объектную модель Автокада. Но ее нужно выучить, что довольно сложно. А так как примеры использования объектной модели приведены на встроенном VB - нужно хорошо выучить и этот язык, а потом "переделать" код приведенных примеров на используемый язык программирования. Если нравится этот способ - милости прошу на сайт dwg.ru, где в разделе "Программирование" рассматриваются вопросы по этому способу взаимодействия с Автокадом. 
Я привел в предыдущем сообщении обычные команды Автокада, их можно найти в выпадающем меню. А можно вручную ввести в командную строку Автокада. Вот к этому я подталкиваю.
В Автокаде есть возможность (из того же выпадающего меню) запускать на выполнение файлы с расширением scr. Это обычный текстовый файл, но со специальным расширением, содержание которого попадает построчно в командную строку Автокада. Если в такой файл записать команды Автокада, а потом запустить файл на выполнение - будет выполнено почти все, что может сделать пользователь, работая в Автокаде. 
Этот scr-файл можно написать в Блокноте, а можно создать с помощью программы, написанной практически на любом языке программирования: с удобным для пользователя интерфейсом, с полями ввода исходных данных, с проверкой этих данных на соответствие каким-либо требованиям и так далее... Я так и поступаю, если мне нужно что-то автоматизировать в Автокаде.


Это сообщение отредактировал(а) de_Nis - 24.3.2009, 10:42
--------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет…
PM   Вверх
EEEEEE
Дата 27.3.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



Есть слудующий код на VB:


Код

Copy objects to another drawing
This example creates Circle objects, then uses the CopyObjects method to copy the circles into a new drawing.
Sub Ch4_Copy_to_New_Drawing()
    Dim DOC0 As AcadDocument
    Dim circleObj1 As AcadCircle, circleObj2 As AcadCircle
    Dim centerPoint(0 To 2) As Double
    Dim radius1 As Double, radius2 As Double
    Dim radius1Copy As Double, radius2Copy As Double
    Dim objCollection(0 To 1) As Object
    Dim retObjects As Variant

    ' Define the Circle object
    centerPoint(0) = 0: centerPoint(1) = 0: centerPoint(2) = 0
    radius1 = 5#: radius2 = 7#
    radius1Copy = 1#: radius2Copy = 2#

    ' Add two circles to the current drawing
    Set circleObj1 = ThisDrawing.ModelSpace.AddCircle _
 (centerPoint, radius1)
    Set circleObj2 = ThisDrawing.ModelSpace.AddCircle _
 (centerPoint, radius2)
    ThisDrawing.Application.ZoomAll

    ' Save pointer to the current drawing
    Set DOC0 = ThisDrawing.Application.ActiveDocument

    ' Copy objects
    '
    ' First put the objects to be copied into a form compatible
    ' with CopyObjects
    Set objCollection(0) = circleObj1
    Set objCollection(1) = circleObj2

    ' Create a new drawing and point to its model space
    Dim Doc1MSpace As AcadModelSpace
    Dim DOC1 As AcadDocument
    Set DOC1 = Documents.Add
    Set Doc1MSpace = DOC1.ModelSpace

    ' Copy the objects into the model space of the new drawing. A
    ' collection of the new (copied) objects is returned.
    retObjects = DOC0.CopyObjects(objCollection, Doc1MSpace)
    Dim circleObj1Copy As AcadCircle, circleObj2Copy As AcadCircle

    ' Get the newly created object collection and apply new
    ' properties to the copies.
    Set circleObj1Copy = retObjects(0)
    Set circleObj2Copy = retObjects(1)
    circleObj1Copy.radius = radius1Copy
    circleObj1Copy.Color = acRed
    circleObj2Copy.radius = radius2Copy
    circleObj2Copy.Color = acRed
    ThisDrawing.Application.ZoomAll
    MsgBox "Circles copied."
End Sub




Как его "срастить" с этим: 

Код

template <class T> HRESULT __fastcall
IAcadDocumentDispT<T>::CopyObjects(VARIANT Objects/*[in]*/, VARIANT Owner/*[in,opt]*/,
                                   VARIANT* IdPairs/*[in,out,opt]*/,
                                   VARIANT* pNewObjects/*[out,retval]*/)



и реализовать ?

PM MAIL   Вверх
de_Nis
Дата 27.3.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старательный
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 19.10.2006
Где: Молдова

Репутация: нет
Всего: 6



Ну, вот видишь, как я и говорил: в начале придется выучить объектную модель, потом  VB, потом "переделать" код на используемый язык программирования (в данном случае С++)...
На форуме :
http://www.caduser.ru/forum/ 
есть подфорум по программированию в Автокаде с помощью Дельфи:
http://www.caduser.ru/forum/index.php?PAGE...list&FID=42
На этом подфоруме есть, например, такая тема: 
http://www.caduser.ru/forum/index.php?PAGE...2&TID=43105 «Добавление объектов в чертеж из внешнего файла» , дальше не "копал". 
Использование языка С++ - в подфоруме 
http://www.caduser.ru/forum/index.php?PAGE...list&FID=24 «ObjectARX», 
но это не С++Builder, на сколько я знаю.

--------------------
Несчастлив не тот, у кого ничего нет, а тот, кто ничего не хочет…
PM   Вверх
EEEEEE
Дата 27.3.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



de_Nis, спасибо!

Бум думать...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.