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

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

при нажатии на точку открывается новое окно в AutoCad

Ответ
Поиск в этой теме
Непрочитано 24.12.2008, 08:57 #1
при нажатии на точку открывается новое окно в AutoCad
Макс_Кунгур
 
Регистрация: 10.12.2008
Сообщений: 122

Добрый день. Подскажите, пожалуйста, как в autolisp написать, чтобы при нажатии на точку в чертеже AutoCad-а, появлялось новое окно, а в этом новом окне - открытие lisp-приложения.
Просмотров: 5771
 
Непрочитано 24.12.2008, 09:18
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
открытие lisp-приложения
в Блокноте, что ли?
Profan вне форума  
 
Непрочитано 24.12.2008, 09:59
#3
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


В точку попасть наверное сложно, а в прямоугольник наверное
будет проще. Для примера построй прямоугольник:

Код:
[Выделить все]
Command: _rectang
Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]: 0,0
Specify other corner point or [Area/Dimensions/Rotation]: 10,10
Ты можеш построить его програмно если захочешь.
И вот к нему код:
Код:
[Выделить все]
(defun c:clik (/ lst x y)
        (setq lst(getpoint "\Select point <Quit> : \n") x(car lst) y(cadr lst))
(if (and(> x 0)(< x 10)(> y 0)(< y 10))(alert "OK!")(alert "CANCEL!"))
  (princ)
  )
По такому принципу наверно можно сделать игру "крестик нолик" например :-)
Holon вне форума  
 
Автор темы   Непрочитано 24.12.2008, 10:46
#4
Макс_Кунгур


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


Вот у меня как выглядит чертеж (ris.jpg). Кружки в нем - это точки, и например при нажатии на одну из них открывается новое окно, и в нем , например строится линия (построение линии взято из lisp-приложения). Но можно конечно еще сделать так, чтобы это все находилось в одном lisp- приложении. Просто чтобы построение линии открывалось в новом окне
Миниатюры
Нажмите на изображение для увеличения
Название: ris.JPG
Просмотров: 85
Размер:	2.0 Кб
ID:	13981  
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 24.12.2008, 11:33
#5
Макс_Кунгур


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


а можно, например, исходя из того предыдущего рисунка, выделить обе точки нажатием на них левой клавишей мыши, и потом на клавиатуре нажать какую-нибудь кнопку, откроется новое окно с нарисованной линией, привязанной к координатам этих точек (линия между двумя этими точками)?
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 24.12.2008, 11:51
#6
Макс_Кунгур


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


Конкретнее это все должно выглядеть так (ris1.jpg). У меня есть карта. На ней множество точек с координатами (y1,x1), (y2,x2) .....Например, при открытии lisp-приложения выводится сообщение в командной строке "Выберите точки". Мы на карте выбираем две точки, они закрашиваются в красный цвет при выборе, нажимаем, предположим, F12, открывается новое окно, и там нарисована линия между двумя точками (y1,x1) и (y2,x2).
Миниатюры
Нажмите на изображение для увеличения
Название: ris1.JPG
Просмотров: 96
Размер:	9.2 Кб
ID:	13984  
Макс_Кунгур вне форума  
 
Непрочитано 24.12.2008, 12:02
#7
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


О каком новом окне речь идет? О новом чертеже?
Profan вне форума  
 
Автор темы   Непрочитано 24.12.2008, 12:23
#8
Макс_Кунгур


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


В новом чертеже, или в этом же чертеже, но в другом окне, если конечно это возможно, главное сохранить привязку к координатам.
Макс_Кунгур вне форума  
 
Непрочитано 24.12.2008, 12:44
#9
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Про окно путаница какая-то. Разве нельзя соединить точки просто в том же чертеже без упоминаний о каких-то окнах?
Profan вне форума  
 
Автор темы   Непрочитано 24.12.2008, 13:27
#10
Макс_Кунгур


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


В чертеже у меня более 1000 точек, а линия нужна между двумя выбранными точками (чтобы новый чертеж содержал в себе только 2 точки и линию)
Макс_Кунгур вне форума  
 
Непрочитано 24.12.2008, 13:35
#11
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Значит, получится огромное (миллиарды, квадриллионы) количество новых файлов с одним только нарисованным отрезком...
Profan вне форума  
 
Автор темы   Непрочитано 24.12.2008, 13:59
#12
Макс_Кунгур


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


В том что и дело, нужно только одно окно с нарисованной линией. Может быть ни при нажатии на точки, а при выделении участка с этими двумя точками, можно реализовать этот алгоритм?
Макс_Кунгур вне форума  
 
Непрочитано 24.12.2008, 14:03
#13
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Так что, из этого множества точек надо выбрать ВРУЧНУЮ всего две точки и соединить их отрезком? И для этого еще какой-то лисп нужен?
Profan вне форума  
 
Автор темы   Непрочитано 24.12.2008, 14:22
#14
Макс_Кунгур


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


Profan, ты или издеваешься, или не допонимаешь, что мне нужно. Линия, это для примера, результат должен быть таков: из чертежа, на котором нарисованы тысяча точек, мы выбираем 2, выделяем их, нажимаем любую кнопку, на выходе не должно быть основного чертежа, а должен быть пустой чертеж с 2 точками, а то что будет делаться впоследствии с этими точками, у меня есть lisp-приложение, которое это будет делать. НА ВЫХОДЕ МНЕ НУЖЕН ПУСТОЙ ЭКРАН С ЭТИМИ 2 ТОЧКАМИ, КОТОРЫЕ Я ВЫБРАЛ. ТОЛЬКО С НИМИ. КООРДИНАТЫ ТОЧЕК НА СТАРОМ ЧЕРТЕЖЕ И НА НОВОМ ДОЛЖНЫ СОВПАДАТЬ. И ВСЕ. А ты мне предлагаешь на этом же чертеже выделит две точки и нарисовать линию между ними, а остальные точки и графика сами что-ли пропадут?.
Макс_Кунгур вне форума  
 
Непрочитано 24.12.2008, 14:43
#15
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Могут и сами пропасть, если в программе предусмотреть выключение слоя, на котором они нарисованы.
Profan вне форума  
 
Непрочитано 24.12.2008, 15:33
#16
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


>Макс_Кунгур
Да ты не нерничай, просто нормально объясни.
Указали две точки, открылся новый чертеж, на нем отрисовались эти 2 точки, что-то с ними сделали (например построили по ним линию). Ну а дальше то что?
Открываешь первый чертеж, указываешь снова 2 точки и куда их дальше - снова в новый чертеж или в тот, в который вставлялись первые две точки???
CB вне форума  
 
Непрочитано 24.12.2008, 15:46
#17
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Макс_Кунгур,
1. Ты знаешь что такое слои?
2. Ты знаешь команду _wblock и _-wblock
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 12.01.2009, 11:26
#18
Макс_Кунгур


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


CB, дальше ничего делать не надо, только если распечатать, возвращаться в основной чертеж не нужно

VVA,
мне нужно именно в новом окне (чертеже) чтобы все нарисовалось. старый можно закрыть
Макс_Кунгур вне форума  
 
Непрочитано 12.01.2009, 13:25
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Макс_Кунгур, После того как выделил нужные тебе 2 точки делаешь
1. Save AS
2. Удаляешь все точки кроме выбранных
3. Запускаешь свой лисп
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 12.01.2009, 13:48
#20
Макс_Кунгур


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


VVA, мне так не надо. подскажи, знаешь ты или нет, как при выделении некоторой области с точками, открывалось новое окно autocad с этими же точками, которые выбрали, без потери координат.
Макс_Кунгур вне форума  
 
Непрочитано 12.01.2009, 15:00
#21
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


За стабильность работы не ручаюсь
Код:
[Выделить все]
(vl-load-com)
(defun C:TEST1 ()
(setq newdoc nil newdoc (vla-Add (vla-get-Documents (vlax-get-Acad-Object)) "acadiso.dwt"))
  )
(defun C:TEST2 ()
(and
(setq ss (ssget "_:L" '((0 . "POINT"))))
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(setq lst (mapcar 'vlax-ename->vla-object(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
;;;(setq newdoc (vla-Add (vla-get-Documents (vlax-get-Acad-Object))
;;;"acadiso.dwt"
;;;))
(or (vla-SetVariable newdoc "PDMODE" (getvar "PDMODE")) t)
(or (vla-SetVariable newdoc "PDSIZE" (getvar "PDSIZE")) t)
  (vla-copyobjects adoc
              (vlax-make-variant (vlax-safearray-fill
                  (vlax-make-safearray vlax-vbobject (cons 0 (1- (length lst))))
                  lst)) (vla-get-ModelSpace newdoc))
;;(or (vla-Activate newdoc) t)
(or (vlax-release-object newdoc) t)
(or (vlax-release-object adoc) t)
)
  )
1. Сначала вызываешь TEST1
2. Затем TEST2, выбираешь точки
3. Затем переключаешься в новый документ
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 12.01.2009 в 15:27. Причина: Орфография
VVA вне форума  
 
Автор темы   Непрочитано 12.01.2009, 15:09
#22
Макс_Кунгур


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


спасибо сейчас попробую
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 12.01.2009, 15:31
#23
Макс_Кунгур


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


VVA, попробовал, вроде бы работает, только в новом чертеже я не могу найти эти точки, хотя они вроде есть
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 12.01.2009, 15:32
#24
Макс_Кунгур


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


в Text Window пишет:
Команда: TEST1
#<VLA-OBJECT IAcadDocument 0141f3e0>

Команда:
Команда: TEST2

Выберите объекты: Укажите противоположный угол: 2 found
Макс_Кунгур вне форума  
 
Непрочитано 12.01.2009, 15:54
#25
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Установи PDMODE и PDSIZE
Вложения
Тип файла: rar test.rar (797.0 Кб, 71 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.01.2009, 07:13
#26
Макс_Кунгур


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


VVA, а как их установить? Я начинающий лиспер, так что извини заранее за такие вопросы.
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 13.01.2009, 07:33
#27
Макс_Кунгур


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


VVA, Я разобрался, где это устанавливать, но их все-равно не видно. А как сделать zoom, чтобы эти точки отображались прямо, когда заходишь в новый чертеж, чтобы их не искать?
Макс_Кунгур вне форума  
 
Автор темы   Непрочитано 13.01.2009, 12:02
#28
Макс_Кунгур


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


VVA, выкладываю dwg-файл с точками. Тебе будет болле понятно, что я хочу.
Вложения
Тип файла: dwg
DWG 2007
obraz.dwg (49.7 Кб, 403 просмотров)
Макс_Кунгур вне форума  
 
Непрочитано 13.01.2009, 16:27
#29
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от Макс_Кунгур Посмотреть сообщение
VVA, Я разобрался, где это устанавливать, но их все-равно не видно. А как сделать zoom, чтобы эти точки отображались прямо, когда заходишь в новый чертеж, чтобы их не искать?
Меню Вид->Зуммирование->Границы
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.01.2009, 07:19
#30
Макс_Кунгур


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


VVA, я знаю где в AutoCad это делается. Мне нужно как это будет выглядеть в lisp? Можешь в свой предыдущий lisp добавить zoom, я не знаю как это делается. Заранее благодарен.
Макс_Кунгур вне форума  
 
Непрочитано 14.01.2009, 09:11
#31
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


Учим матчасть здесь в 53 посту я тебе писал про "ZOOM"
Holon вне форума  
 
Непрочитано 14.01.2009, 11:20
#32
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Zoom идет в активном документе. Пробуй так, хотя вариант довольно глючный
Код:
[Выделить все]
(vl-load-com)
(defun C:TEST1 ()
(setq newdoc nil newdoc (vla-Add (vla-get-Documents (vlax-get-Acad-Object)) "acadiso.dwt"))
  )
(defun C:TEST2 ()
(and
(setq ss (ssget "_:L" '((0 . "POINT"))))
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(setq lst (mapcar 'vlax-ename->vla-object(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
;;;(setq newdoc (vla-Add (vla-get-Documents (vlax-get-Acad-Object))
;;;"acadiso.dwt"
;;;))
(or (vla-SetVariable newdoc "PDMODE" (getvar "PDMODE")) t)
(or (vla-SetVariable newdoc "PDSIZE" (getvar "PDSIZE")) t)
  (vla-copyobjects adoc
              (vlax-make-variant (vlax-safearray-fill
                  (vlax-make-safearray vlax-vbobject (cons 0 (1- (length lst))))
                  lst)) (vla-get-ModelSpace newdoc))
;(or (vla-SendCommand newdoc "_.ZOOM _E") t)
(or (vla-Activate newdoc) t)
(or (vla-ZoomAll (vlax-get-Acad-Object)) t)
(or (vlax-release-object newdoc) t)
(or (vlax-release-object adoc) t)
)
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > при нажатии на точку открывается новое окно в AutoCad

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Ошибка при открытии AutoCAD clout AutoCAD 4 23.10.2008 15:27
Диалоговое окно при открытии файла -=BurN=- AutoCAD 9 22.02.2007 11:25
При команде Open не открывается диалоговое окно Jull AutoCAD 4 28.02.2006 11:19
Свернуть окно при запуске /вопрос по ВинДос/ Perezz!! Программирование 9 25.05.2004 20:16