Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нужна команда AutoCad для копирования объекта (по его Handle) в буфер обмена

Нужна команда AutoCad для копирования объекта (по его Handle) в буфер обмена

Ответ
Поиск в этой теме
Непрочитано 31.05.2012, 15:36 #1
Нужна команда AutoCad для копирования объекта (по его Handle) в буфер обмена
Enion
 
Регистрация: 25.05.2012
Сообщений: 12

Добрый день!
Мне нужно командой скопировать в буфер обмена объект. Мне известен его Header.
Вот такая строка (command "_copyclip" (handent "6EFCB") "") это выполняет первый раз успешно, а второй раз копирует но почему то требует что то ещё. При выполнении из командной строки выдаёт надпись <имя объекта:7EFD42D8> и ждёт ещё каких то действий "Enter" или "Esc"... По "Esc" вообще выдаёт надпись "Ошибка: функция отменена". А если эту строку скопировать в LSP файл и запустить его, то со второй попытки окно "Загрузка/выгрузка приложений" после выполнения скрипта не закрывается, а остаётся отрытым. Если этот скрипт вызвать командой SendCommand через API AutoCad то после второй попытки вообще вываливается ошибка выполнения. НО во всех вариантах первое выполнение выполнение проходит отлично. Не пойму как такое может быть.
Я не знаток AutoLisp, подскажите чего к ней не хватает?
Просмотров: 7077
 
Непрочитано 31.05.2012, 15:41
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Enion Посмотреть сообщение
Нужна команда AutoCad для копирования объекта (по его Handle) в буфер обмена
А зачем?
Цитата:
SendCommand через API AutoCad
Я так понял - речь о .NET API... Что мешает заюзать средства .NEt Framework для работы с буфером обмена?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 31.05.2012, 15:55
#3
Enion


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


Я работаю с API AutoCad из Delphi.
Открываю AutoCad ка OLE объект AcadApplication:=CreateOlEObject('AutoCAD.Application').
А Lisp команду отправляю на выполнение так AcadApplication.ActiveDocument.SendCommand(' (command "_copyclip" (handent "6EFCB") "")')
Разве можно так скопировать объект без использования Lisp команды?
Enion вне форума  
 
Непрочитано 31.05.2012, 16:01
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Enion Посмотреть сообщение
Разве можно так скопировать объект без использования Lisp команды?
не стоит воспринимать LISP как наиболее полный инструмент разработки - это не так. Правильней будет так: если это можно в LISP - тем более это можно в др. языках (за редким исключением). Тынц.

п.с. Поправил ссылку.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 31.05.2012, 16:52
#5
Enion


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


Дело, в том, что скопировать мне нужно не текст, а весь объект. И именно в буфер обмена, а не просто сделать его копию на чертеже.
Enion вне форума  
 
Непрочитано 31.05.2012, 16:54
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Enion Посмотреть сообщение
Дело, в том, что скопировать мне нужно не текст, а весь объект. И именно в буфер обмена, а не просто сделать его копию на чертеже.
А текст-то здесь при чём? Читай внимательней:
Цитата:
the “clipboard ring” functionality that used to be in Microsoft Office (at least I say “used to be” because I haven’t found it in Office 2007), and decided to implement similar functionality in AutoCAD.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 31.05.2012, 17:34
#7
Enion


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


Ой! Вы изменили ссылку! Первый раз она вела не туда.
Посмотрел, похоже то, но мне то всё это из под Delphi повторить надо. Но всёравно спасибо, буду пытаться понять что там написано...
Enion вне форума  
 
Непрочитано 31.05.2012, 17:36
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Enion Посмотреть сообщение
Ой! Вы изменили ссылку! Первый раз она вела не туда.
ну так там и приписка имеется об этом:
Цитата:
п.с. Поправил ссылку.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 31.05.2012, 19:16
#9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,409
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Enion Посмотреть сообщение
но мне то всё это из под Delphi повторить надо
Не получится. Всё что там написано делается внутри процесса AutoCAD, а Delphi работает вне процесса.
Александр Ривилис вне форума  
 
Непрочитано 31.05.2012, 20:20
#10
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Попробуй так:
Код:
[Выделить все]
AcadApplication.ActiveDocument.SendCommand('_copyclip (handent "6EFCB")  ')
Обрати внимание на два пробела перед закрывающим апострофом '
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Автор темы   Непрочитано 01.06.2012, 09:34
#11
Enion


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


Pastor,
Сработало! Ты гений!!!!!
Остался последний вопрос: "Как сделать так, чтобы AutoCad при выполнении команды не визуализировался?"
Так-то он находится в фоновом режиме, а при выполнении SendCommand он отображается на экране. Пробовал сразу после этого ставить ему Visible:=False, но он всёравно успевает мелькнуть на экране.
Enion вне форума  
 
Непрочитано 01.06.2012, 11:24
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Enion Посмотреть сообщение
Остался последний вопрос: "Как сделать так, чтобы AutoCad при выполнении команды не визуализировался?"
Так-то он находится в фоновом режиме, а при выполнении SendCommand он отображается на экране. Пробовал сразу после этого ставить ему Visible:=False, но он всёравно успевает мелькнуть на экране.
Используй консольную версию, появившуюся в AutoCAD 2013. Запускается мгновенно и без графических интерфейсов. Читай здесь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 01.06.2012, 14:36
#13
Enion


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


Pastor, Не работает... Вернее работает только один раз. Если я второй раз ему передаю другой handent Он возвращает тот же самый объект что и в первый раз
hwd, Программа должна работать со всеми версиями AutoCad начиная аж с 2007
Enion вне форума  
 
Непрочитано 01.06.2012, 15:09
#14
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Enion Посмотреть сообщение
hwd, Программа должна работать со всеми версиями AutoCad начиная аж с 2007
Тогда тебе однозначно нужно заморачиваться с Lisp (ARX и .NET не пойдут, т.к. они зависят от версии AutoCAD). И вряд ли ты избавишься от этой проблемы:
Цитата:
Пробовал сразу после этого ставить ему Visible:=False, но он всёравно успевает мелькнуть на экране
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.06.2012, 16:05
#15
Кулик Алексей aka kpblc
Moderator

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


Чего-то я перестал понимать ход дискуссии:
Цитата:
Сообщение от Enion Посмотреть сообщение
нужно командой
В моем понимании команда - это то, что выполняется в контексте документа (тупо передается в ком.строку).
Дальше выясняется, что программа работает вне AutoCAD. Зачем тогда использовать SendCommand? Можно работать с AutoCAD как с COM-объектом и добираться до нужных примитивов, например, через метод HandleToObject объекта документа:
Код:
[Выделить все]
AcadApplication.ActiveDocument.HandleToObject('2296')
И работать уже с указателем на полученный объект любыми доступными средствами. Или не катит?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.06.2012, 17:48
#16
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


стесняюсь спросить, а куда вы из буфера потом скопированные объекты собираетесь вставлять? В ворд? В пайнт?
gomer вне форума  
 
Автор темы   Непрочитано 04.06.2012, 09:56
#17
Enion


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


gomer, Кулик Алексей aka kpblc, Задача в конечном итоге следующая:
Из под Delphi заставить AutoCad, не визуализируясь на экране, вытащить из dwg файла все вставленные туда Word документы и сохранить их на диск.
Enion вне форума  
 
Непрочитано 04.06.2012, 10:39
#18
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


имхо, проще ручками пересохранить
gomer вне форума  
 
Автор темы   Непрочитано 04.06.2012, 13:31
#19
Enion


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


Цитата:
Сообщение от gomer Посмотреть сообщение
имхо, проще ручками пересохранить
gomer, проще, когда сам и один раз.
Enion вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нужна команда AutoCad для копирования объекта (по его Handle) в буфер обмена

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание AutoCAD при копирование через буфер обмена Traum AutoCAD 78 07.03.2024 12:07
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
1. AutoCAD Кулик Алексей aka kpblc FAQ: Часто задаваемые вопросы 25 27.09.2016 13:29
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Уже работаю в AutoCAD 2006, но нужна книжка чтобы знать все тонкости работы с 2D графикой. Unt0nich Поиск литературы, чертежей, моделей и прочих материалов 17 06.05.2008 17:58