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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как увеличить значение координаты Х в 2 раза при выводе на экран.

Как увеличить значение координаты Х в 2 раза при выводе на экран.

Ответ
Поиск в этой теме
Непрочитано 20.11.2019, 10:00 #1
Как увеличить значение координаты Х в 2 раза при выводе на экран.
Maloy
 
Регистрация: 19.11.2019
Сообщений: 10

Добрый день!

Есть адаптированный Lisp для вывода координат (для ЧПУ) относительно нулевой точки.
Проблема в том, что выводится фактическое значение координат, а для написания программы в ЧПУ нужен диаметр, а не радиус.
В Lispe я ещё чайник, поэтому прошу помощи.
Как сделать так, чтобы значение точки "Х" выводилось увеличенное в 2 раза?

(defun C:xy1(/ PNT1 P1X P1Y STDY STDX COORDN COORDE PTXT)
(setq PNT1 (getpoint "Viberi tochku: "))
(setq P1X (car pnt1))
(setq P1Y (cadr pnt1))
(setq STDX (rtos P1X 2 3))
(setq STDY (rtos P1Y 2 3))
(setq COORDN (strcat "X= " STDY ))
(setq COORDE (strcat "Z= " STDX ))
(setq PTXT (getpoint"Tochka vynoski: "))
(command "LEADER" PNT1 PTXT ""COORDE COORDN ""))

Заранее благодарю за любую помощь в решении данной задачи.
Просмотров: 1920
 
Непрочитано 20.11.2019, 10:11
#2
Кулик Алексей aka kpblc
Moderator

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


Умножь p1y на 2, если так надо. Хотя при чем тут радиус и диаметр - не особо понятно: указываешь одну точку, потом куда ставить выноску - и ни слова про диаметры / радиусы.
Может, вообще надо размеры использовать?

----- добавлено через ~3 мин. -----
Ну и так, для приколу:
Код:
[Выделить все]
 (vl-load-com)
(defun c:xy2 (/ adoc pt lead_pt anno model lead)
  (if (and (= (type (setq pt (vl-catch-all-apply (function (lambda () (getpoint "\nSelect point <Cancel> : "))))))
              'list
              ) ;_ end of =
           pt
           (= (type
                (setq lead_pt (vl-catch-all-apply (function (lambda () (getpoint pt "\nLeader point <Cancel> : ")))))
                ) ;_ end of type
              'list
              ) ;_ end of =
           lead_pt
           ) ;_ end of and
    (progn (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
           (setq model (vla-get-modelspace adoc)
                 anno  (vla-addmtext
                         model
                         (vlax-3d-point lead_pt)
                         0.
                         (strcat "X= " (rtos (cadr pt) 2 3) "\\PY=" (rtos (car pt) 2 3))
                         ) ;_ end of vla-AddMText
                 lead  (vla-addleader
                         model
                         (vlax-make-variant
                           (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 5)) (append pt lead_pt))
                           ) ;_ end of vlax-make-variant
                         anno
                         aclinewitharrow
                         ) ;_ end of vla-addleader
                 ) ;_ end of setq
           (vla-endundomark adoc)
           ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.11.2019, 10:38
#3
Maloy


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


Может я что-то не правильно делаю, но у меня этот lisp не работает.
Указываю искомую точку, потом точку выноски и .... ничего.
Подскажи неучу в чем может быть причина?
Maloy вне форума  
 
Непрочитано 20.11.2019, 13:38
#4
Кулик Алексей aka kpblc
Moderator

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


Попробуй включить пошаговую отладку. У меня код срабатывает (конечно, учитывая его недоработанность)
Миниатюры
Нажмите на изображение для увеличения
Название: createLeader.gif
Просмотров: 30
Размер:	299.2 Кб
ID:	220210  
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.11.2019, 14:19
#5
Maloy


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


Если честно, не представляю как вкючить пошаговую отладку.
И ещё вопрос...у меня ACAD 2019 - это может как-то повлиять?
Если нет, то не мог бы объяснить как это все проверить, отладить и т.д.?

Опишу то, что делал я...может в этом вся проблема, в моей криворукости.
Я скопировал твой код и вставил его в новый документ в редакторе Visual Lisp удалив вручную номера строк.
Затем сохранил. Загузил. В командной строке набрал XY2, указал искомую точку, затем точку выноски и ..... ничего.
Ошибок никаких не выдает.
Что делать?
Maloy вне форума  
 
Непрочитано 20.11.2019, 15:07
#6
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Maloy Посмотреть сообщение
не представляю как вкючить пошаговую отладку.
https://autolisp.ru/2009/09/12/vlide-misc-02/
Цитата:
Сообщение от Maloy Посмотреть сообщение
у меня ACAD 2019 - это может как-то повлиять?
Не должно.
Цитата:
Сообщение от Maloy Посмотреть сообщение
Опишу то, что делал я...
http://dwg.ru/pub/9
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.11.2019, 17:00
#7
Maloy


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


Вообщем, работает, но как-то некорректно.
Если загрузить чертеж, подгрузить Lisp, вызвать функцию, то отображает координаты относительно нулевой точки.
Но стоит только перетащить ситему координат на чертеж и повторно вызвать функцию, то координаты не отображаются.
И при всем при этом значения "Х" в 2 раза не увеличиваются.
Вот как-то так.

У меня есть Lisp который работал в старой версии автокада 2014г.
Может его отредактировать?
(defun C:zg ()
(setq olderr *error* *error* macerr)
(setq p1 (getpoint "\n ISTENEN NOKTA KORDINATI SECIN:")
p2(getpoint p1 "\n ISTENEN KORDINATIN YERINI ISARETLEYIN...:")
yaz(strcat "X=" (rtos (* 2 (cadr p1))) " Z=" (rtos (car p1)))
)
(command "_dim1" "LEADER" p1 p2 ""(command yaz))
(setq *error* olderr) (princ)
)
Maloy вне форума  
 
Непрочитано 21.11.2019, 04:41
#8
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,826


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Попробуй включить пошаговую отладку. У меня код срабатывает (конечно, учитывая его недоработанность)
Offtop: С помощью чего ты сделал эту гифку?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 21.11.2019, 07:54
#9
Кулик Алексей aka kpblc
Moderator

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


Krieger, Offtop: Старая Camtasia.
Цитата:
Сообщение от Maloy Посмотреть сообщение
отображает координаты относительно нулевой точки.
А относительно какой точки должны отображаться координаты запрошенной? И, самое главное - почему?
Цитата:
Сообщение от Maloy Посмотреть сообщение
при всем при этом значения "Х" в 2 раза не увеличиваются.
Ага, я и не делал. Я вообще-то показал просто другой метод и подход. Находишь строку
Код:
[Выделить все]
 (rtos (cadr pt) 2 3)
и меняешь на
Код:
[Выделить все]
 (rtos (* 2. (cadr pt)) 2 3)
А, сорян, ошибся в выводимых данных.
Код:
[Выделить все]
 (vl-load-com)
(defun c:xy2-doublex (/ adoc pt lead_pt anno model lead)
  (if (and (= (type (setq pt (vl-catch-all-apply (function (lambda () (getpoint "\nSelect point <Cancel> : "))))))
              'list
              ) ;_ end of =
           pt
           (= (type
                (setq lead_pt (vl-catch-all-apply (function (lambda () (getpoint pt "\nLeader point <Cancel> : ")))))
                ) ;_ end of type
              'list
              ) ;_ end of =
           lead_pt
           ) ;_ end of and
    (progn (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
           (setq model   (vla-get-modelspace adoc)
                 pt      (trans pt 1 0)
                 lead_pt (trans lead_pt 1 0)
                 anno    (vla-addmtext
                           model
                           (vlax-3d-point lead_pt)
                           0.
                           (strcat "Z= " (rtos (car pt) 2 3) "\\PX=" (rtos (* 2. (cadr pt)) 2 3))
                           ) ;_ end of vla-AddMText
                 lead    (vla-addleader
                           model
                           (vlax-make-variant
                             (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 5)) (append pt lead_pt))
                             ) ;_ end of vlax-make-variant
                           anno
                           aclinewitharrow
                           ) ;_ end of vla-addleader
                 ) ;_ end of setq
           (vla-endundomark adoc)
           ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
Цитата:
Сообщение от Maloy Посмотреть сообщение
У меня есть Lisp который работал в старой версии автокада 2014г.
Может его отредактировать?
А что за команда _.dim1? Мой 2018 про нее ни сном ни духом. Поэтому я проверить результаты не могу. И лисп сам по себе работать гарантированно не будет: нет функции macerr.

----- добавлено через ~5 мин. -----
Добавил обработку ПСК. Правда, не связывался с вариантом поворота - только перенос.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.11.2019, 10:25
#10
Maloy


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


Алексей, давай по самому простому (на мой взгляд) пути.
Ты можешь изменить мой исходный код?
По логике там нужно прописать еже одну строчку, где введем новую переменную, например D = STDY*2?
А потом эту переменную подставим в (setq COORDN (strcat "X= " N )) ?
Тогда в результате мы получим искомый результат?
Или это не возможно?
Миниатюры
Нажмите на изображение для увеличения
Название: 111.jpg
Просмотров: 6
Размер:	124.5 Кб
ID:	220244  
Maloy вне форума  
 
Непрочитано 21.11.2019, 10:26
#11
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Умножь p1y на 2, если так надо
Я ж в самом начале предлагал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.11.2019, 10:48
#12
Maloy


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


Давай попробуем сделать так!
Maloy вне форума  
 
Непрочитано 21.11.2019, 13:35
#13
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от Maloy Посмотреть сообщение
Может его отредактировать?
Код:
[Выделить все]
 
(defun C:zg ()
;	(setq olderr *error* *error* macerr)
	(setq p1 (getpoint "\n ISTENEN NOKTA KORDINATI SECIN:")
		  p2 (getpoint p1 "\n ISTENEN KORDINATIN YERINI ISARETLEYIN...:")
		  yaz (strcat "X=" (rtos (* 2 (car p1))) " Y=" (rtos (cadr p1)))
	)
;	(command "_dim1" "LEADER" p1 p2 ""(command yaz))
	(command "._LEADER" p1 p2 "" yaz "")
;	(setq *error* olderr)
	(princ)
)
koMon вне форума  
 
Автор темы   Непрочитано 21.11.2019, 15:44
#14
Maloy


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


ничего не понимаю...
не работает.
Maloy вне форума  
 
Непрочитано 21.11.2019, 21:48
#15
VVA

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


Maloy, Так?
Код:
[Выделить все]
(defun C:xy1(/ PNT1 P1X P1Y STDY STDX COORDN COORDE PTXT)
(setq PNT1 (getpoint "Viberi tochku: "))
(setq P1X (car pnt1))
(setq P1Y (cadr pnt1))
(setq STDX (rtos P1X 2 3))
(setq STDY (rtos (* 2. P1Y) 2 3));_Умножаем P1Y на 2
(setq COORDN (strcat "X= " STDY ))
(setq COORDE (strcat "Z= " STDX ))
(setq PTXT (getpoint pnt1 "Tochka vynoski: "))
(command "_LEADER" PNT1 PTXT "" COORDE COORDN "")
(princ))
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 22.11.2019 в 10:04.
VVA вне форума  
 
Автор темы   Непрочитано 22.11.2019, 08:45
#16
Maloy


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


Написано вроде правильно, но при загрузке кода выдает ошибку.
Смотри скрин.
Я уже всю голову сломал.
И самое страшное, это то, что я не могу на это повлиять.
Maloy вне форума  
 
Автор темы   Непрочитано 22.11.2019, 08:47
#17
Maloy


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


Посмотри скрин.
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 9
Размер:	166.5 Кб
ID:	220288  
Maloy вне форума  
 
Непрочитано 22.11.2019, 08:50
#18
Кулик Алексей aka kpblc
Moderator

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


Одну закрывающую скобку пропустил при копировании?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.11.2019, 08:57
#19
Maloy


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


Действительно! (я чайник)!
Урааа, друзья, заработало!
Вы это сделали.
Спасибо всем огромное за проделанную работу.
С этого момента буду более детально изучать Lisp.
Maloy вне форума  
 
Непрочитано 22.11.2019, 09:02
#20
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Ctrl-A->Ctrl-C->Ctrl-V
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как увеличить значение координаты Х в 2 раза при выводе на экран.

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как просчитать координаты всего чертежа, зная координаты нескольких точек Barsum AutoCAD 6 16.02.2018 09:32
Почему не отображается значение масштабного коэффициента в AutoCAD 2013 при вызове команды Масштаб? Vlad_black AutoCAD 12 22.08.2016 11:15
Чему принять значение жесткости конечной связи №51 при расчете фундамента на упругом основании? (SCAD 21.1) Emc SCAD 4 13.08.2016 20:44
Как в динамическом блоке вставить значение из атрибута блока в значение параметрического размера(внутри блока)? swcats Динамические блоки 3 22.07.2011 08:50