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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autocad 2008 Autolisp Открытие чертежа

Autocad 2008 Autolisp Открытие чертежа

Ответ
Поиск в этой теме
Непрочитано 06.10.2010, 16:28 #1
Autocad 2008 Autolisp Открытие чертежа
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Подскажите, каким образом программно открыть чертеж. Путь его я знаю.
В общем полная идея такая: нужно получить некоторую информацию с одного чертежа, сохранить ее в переменной, потом открыть другой чертеж вытащить нужное значение, закрыть чертеж (вернуться к первому) и сохранить это значение в другую переменную. Такое возможно?!
Просмотров: 12490
 
Непрочитано 06.10.2010, 16:43
#2
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Zaghim, посмотри тут
http://autolisp.ru/2010/04/08/procee...tive-document/
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 06.10.2010, 16:56
#3
Zaghim


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


Как все дико сложно, ппц(((
Zaghim вне форума  
 
Непрочитано 06.10.2010, 17:02
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Это только на первый взгляд...
Do$ вне форума  
 
Автор темы   Непрочитано 06.10.2010, 17:04
#5
Zaghim


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


Документ открыл таким способом
(vla-open (vla-get-Documents (vlax-get-acad-object)) "путь и имя" :vlax-true " ")
т.е. чертеж стал активным, в нем можно сделать то, что я хочу.
Как его теперь закрыть и что самое главное, как сделать что бы сохранилось то значение, которое мне нужно?
Zaghim вне форума  
 
Непрочитано 06.10.2010, 17:42
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Как его теперь закрыть и что самое главное, как сделать что бы сохранилось то значение, которое мне нужно?
Никак. Нужно использовать ObjectDBX
Подробнее - Работа с неактивным документом Там же есть примеры
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 06.10.2010, 17:49
#7
Zaghim


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


Смотрите, мне нужна координата. Я передаю туда координату и получить назад тоже должен ее. Я думаю это можно сделать, если я сохраню координату в файл, в новом чертеже ее прочитаю и сохраню опять в этот файл уже другую. Вопрос в том как закрыть активный документ. Через close закрывает все окна кроме активного(((( А вот с неактивным вообще хз, ничего не понял и примеры какие-то непонятные(((
Zaghim вне форума  
 
Непрочитано 06.10.2010, 18:51
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Почитай Последовательное применение lisp-функции к множеству файлов DWG
Ты пытаешься реализовать вариант №1 из #4. Тогда не нужно делать файл активным, а работать через указатель на документ (открытый файл)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.10.2010, 21:47
#9
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Я просто удивлен! Все время пользуюсь vla-Open и vla-Close и не знал, что открыть и закрыть файл вообще проблема.
vla-Close закрывает документ как с сохранением, так и без, как с прежним именем, так и с новым, типа Save As.
vla-Open применяю к указателю на Documents, а когда открыл - сохраняю указатель на открывшийся документ и применяю к нему vla-Close.
Сколько не напрягал мозг, а так и не понял почему такие ассы как VVA и Kpblc открывают документ по другому?

Ну мелькнет в окне и что?
Supermax вне форума  
 
Автор темы   Непрочитано 06.10.2010, 22:23
#10
Zaghim


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


А можно код в студию? А значение, которое я получу со второго чертежа сохранится, когда я закрою его и вернусь к 1 чертежу?
Zaghim вне форума  
 
Непрочитано 06.10.2010, 23:02
#11
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да без проблем. Только про значение поясни. Ты в файле что-то меняешь и далее save делаешь?

А код -
Код:
[Выделить все]
(setq doc1 (vla-Open (vla-get-Documents (vlax-get-acad-object)) "путь и имя" :vlax-falce " "));не понимаю, почему у тебя true стоит
;открыли
;...
;...
;...
;чего-то там наваяли
(vla-Save doc1);сохранили, хотя и не обязательно, следующий метод и так сохраняет.
(vla-Close doc1 :vlax-true );если надо сохранять с новым именем, то еще "путь и имя" надо третьим аргументом добавлять
Вообще-то это все я делаю не покидая своего пространства прямо в неактивном (но открытом) документе. Я не совсем понимаю что и где ты хочешь сохранить.

Я заметил, что ты открываешь файл с аргументом :vlax-true - это только для чтения, а :vlax-falce - с возможностью редактирования. Может поэтому у тебя не сохранялись данные?

Последний раз редактировалось Supermax, 06.10.2010 в 23:12.
Supermax вне форума  
 
Автор темы   Непрочитано 07.10.2010, 09:41
#12
Zaghim


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


Так постараюсь еще раз более подробно. У меня открыт один чертеж, на нем есть всяческие линии. Есть такой же второй чертеж, тоже с линиями, но отличающийся своим расстоянием друг от друга. Я тыкаю точку - получаю координату - расстояние до соседней линии по оси Y. Затем запоминаю ее и заношу в атрибуты динамического блока. Ок, все круто. А теперь мне нужно получить вторую точку из другого чертежа и занести ее в этот же блок! Т.е. я открываю второй чертеж, причем точка куда я тыкнул 1 раз должна быть уже не нил на новом чертеже. Нахожу там координату до соседней линии, сохраняю ее, закрываю чертеж без сохранения и возвращаюсь к начальному чертежу, далее вношу второе значение во второй атрибут динамического блока. Во так думаю понятнее)
Про сохранение. Когда мы работаем на одном чертеже и выполняем там свой лисп, то все значения, сохраненные в переменных, будут доступны только на этом чертеже, т.е. если я открою новый чертеж и посмотрю, что у меня лежит в переменной допустим а1, там будет нил, хотя на первом оно равно 20, к примеру.

Вот о чем я и говорил. Такая структура не работает...
(setq doc1 (vla-open (vla-get-Documents (vlax-get-acad-object)) "путь и имя" :vlax-true " "))
(setq bp2 bp1)
(setq bp2 (polar bp2 0 10000))
(vla-Close doc1 :vlax-true )
т.е. при открытие нового чертежа все значения ставятся нил

Последний раз редактировалось Zaghim, 07.10.2010 в 10:18.
Zaghim вне форума  
 
Непрочитано 07.10.2010, 10:09
#13
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Для передачи переменной в другой чертеж есть функция vl-propagate.
Do$ вне форума  
 
Непрочитано 07.10.2010, 10:09
#14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Я просто удивлен! Все время пользуюсь vla-Open и vla-Close и не знал, что открыть и закрыть файл вообще проблема.
Это не проблема. Главное не делать его активным, а работать
Цитата:
Сообщение от Supermax Посмотреть сообщение
не покидая своего пространства прямо в неактивном (но открытом) документе
Цитата:
Сообщение от Zaghim Посмотреть сообщение
Т.е. я открываю второй чертеж, причем точка куда я тыкнул 1 раз должна быть уже не нил на новом чертеже. Нахожу там координату до соседней линии, сохраняю ее, закрываю чертеж без сохранения и возвращаюсь к начальному чертежу
Интерактивно так не выйдет. Почему бы тебе не рассмотреть варинт подгрузки нужных чертежей как внешней ссылки или вставки как блока?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 07.10.2010, 10:21
#15
Zaghim


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


Вот о чем я и говорил. Такая структура не работает...
(setq doc1 (vla-open (vla-get-Documents (vlax-get-acad-object)) "путь и имя" :vlax-true " "))
(setq bp2 bp1)
(setq bp2 (polar bp2 0 10000))
(vla-Close doc1 :vlax-true )
т.е. при открытие нового чертежа все значения ставятся нил.

Хм,хм ... т.е. подгрузить чертеж х-рефом, заморозив предварительно все что есть на чертеже, выполнить мои махинации и потом х-реф удалить?

А вот с vl-propagate сейчас попробую, есть еще две функции vl-bb-set and vl-bb-ref щас и их изучим
Zaghim вне форума  
 
Непрочитано 07.10.2010, 10:34
#16
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Zaghim, создай два лип-файла. 1-й - макрос активного окна, в котором пользователя просят ткнуть в точку. Макрос создает переменную с заранее тобой придуманным именем. Запускает второй лисп-файл, где координаты точки берутся из переменной и расчитывается число, которое записывается во вторую переменную с заранее придуманным тобой именем (переменные надо определять, как правильно напоминает тебе Do$). Затем первый лисп создает набор файлов для обработки (все переменные автоматом там пропишутся) и через vla-SendCommand запускаешь в неактивном документе второй лисп, считываешь вторую переменную, запускаешь в следующем документе второй лисп и т.д.
Все происходит из первого, активного документа.

Ты опять открываешь файл "только для чтения"
Код:
[Выделить все]
setq doc1 (vla-open (vla-get-Documents (vlax-get-acad-object)) "путь и имя" :vlax-true " "))
Маленькая поправка. Обе переменные должны быть созданы первым лиспом сразу и определены через функцию vl-propagate

Последний раз редактировалось Supermax, 07.10.2010 в 10:49.
Supermax вне форума  
 
Автор темы   Непрочитано 07.10.2010, 10:47
#17
Zaghim


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


Не не не))
DO$ правду сказал! Получилось все дело вот каким простым способом вез всяких там наворотов с ObjectDBX!!!

(vl-propagate 'bp1)
(vl-propagate 'bp2)
(setq doc1 (vla-open (vla-get-Documents (vlax-get-acad-object)) "путь и имя" :vlax-true " "))
(setq bp2 bp1)
(setq bp2 (polar bp2 0 10000))
(vla-Close doc1 :vlax-false )

Вот так вот...значение есть, теперь можем делать, что ходим, единственное экран теперь будет мелькать туда сюда...но это уже ерунда!

Файл мне и нужно открывать только для чтения, я в нем ничего не меняю, только получаю свое и сваливаю)

Еще ерунда в том, что физически файл не закрывается, т.е. я возвращаюсь к первому чертежу, а тот остается... вот это большая беда!
Zaghim вне форума  
 
Непрочитано 07.10.2010, 11:00
#18
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Блин! Куда ты возвращаешся? Ты из какого файла запускаешь коды? Из какого документа ты делаешь vla-Open? И как ты замеряешь расстояние, если ты функцию polar запускаешь не в открытом тобою документе, а в том, в котором сидишь?
надо делать
Цитата:
(vla-SendCommand doc1 "(setq bp2 (polar bp2 0 10000))")
Supermax вне форума  
 
Автор темы   Непрочитано 07.10.2010, 11:16
#19
Zaghim


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


Когда я открываю новый чертеж он ведь становится активным! Получается что там и ищу точку, а после его закрытия возвращаюсь опять к первому, лисп один, из него все запускаю
Zaghim вне форума  
 
Непрочитано 07.10.2010, 11:20
#20
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Как он у тебя становится активным?!!! Ты ему что vla-Activate делаешь?
Ты хоть на монитор смотришь? Ты что перед сабой видишь?

Твоя
Цитата:
(setq doc1 (vla-open (vla-get-Documents (vlax-get-acad-object)) "путь и имя" :vlax-true " "))
открывает файл, он на мгновение появляется в окне и пропадает, опять активным становится то окно из которого лисп запущен и все остальные коды ты из него запускаешь.
Supermax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autocad 2008 Autolisp Открытие чертежа

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видеоуроки AutoCAD kosmax AutoCAD 173 17.02.2017 15:08
Проблемма с установкой AutoCAD 2008 Alxndr1697 AutoCAD 27 24.04.2010 21:43
Ищу любое рукодство пользователя AutoCAD Electrical 2008 DAM Поиск литературы, чертежей, моделей и прочих материалов 3 07.10.2009 17:20
Книга Хейфеца А.Л. 3D-технология построения чертежа. AutoCAD. 3-е изд. BM60 Разное 22 16.02.2009 09:55
не удаляется AutoCAD Architecture 2008 ПалычЪ AutoCAD 4 19.12.2007 09:53