|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Почему код dxf 370 не возвращает веса линии?
Регистрация: 14.12.2008
Сообщений: 1,134
|
||
Просмотров: 2718
|
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Спасибо за ответы! Задал вес линии 0,05. Получил cLWeight =5.
Далее пытаюсь назначить тикущий вес линий и надо перед этим получить cLWeight =0.05. Но не удается получить 0.05 Почему код Код:
Что надо сделать чтобы получалось 0.05? |
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 420
|
Дело в том, что для компьютера есть несколько разных типов чисел. В частности есть числа типа REAL и типа INTEGER.
Числа типа INTEGER имеют только целую часть, а REAL - "обычные" числа с дробной частью (она может быть равна 0). Соответственно Lisp по разному работает с ними, что собственно у тебя и произошло: Код:
Положи себе в закладки ссылку на справку Автодеска по Lisp и не забывай в нее смотреть |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Мне надо присвоить системной переменной "CELWEIGHT" присвоить толщину линий 0,05
Вместо 0,05 надо указывать 5 Но не получается: Код:
Строка Код:
Как на ЛИСП присвоить системной переменной CELWEIGHT значение 5? Последний раз редактировалось МишаИнженер, 02.12.2022 в 06:40. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627
|
Здесь
(setvar "CELWEIGHT" (rtos cLWeight)) rtos - лишнее. Ты пытаешься засунуть в эту системную переменную СТРОКУ (т.е. текстовое значение числа), а она хочет именно ЧИСЛО. Для LISP'а это три разных значения 5 - целое число 5.0 - действительное число "5" или "5.0" - текстовая строка Человеку - без разницы, компьютеру - нет.
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
|
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627
|
(setvar "CELWEIGHT" acLnWt005)
(setvar "CELWEIGHT" (rtos cLWeight)) Не, ну нормально! Сперва ты пытаешься засунуть несуществующую переменную acLnWt005, а потом туда же всунуть текстовую строку. :-)
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627
|
Ну давай смотреть, что там такое.
Перед: (setvar "CELWEIGHT" cLWeight) Пиши: (print cLWeight) (print (type cLWeight)) Что выводят команды (print) ? Но у тебя просто вылетает на (setvar "CELWEIGHT" acLnWt005) ну нет же такой переменной! Убери эту строку или закомментируй.
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
acLnWt005 это внутренне определения веса линии толщиной 0,05.
Строка (setvar "CELWEIGHT" cLWeight) отрабатывает нормально. В следующей строке я назначаю вместо acLnWt005 число 5 так как если в командную строку после команды CELWEIGHT ввести число 5 то Акад нормально понимает, что текущая толщина линий 0,05. А вот на лиспе просто указать число 5 не проходит появляется ошибка. Получается надо создать функцию находящую соответствие между значением cLWeight и внутренними константами: (acLnWt000 acLnWt005 acLnWt009 acLnWt013 acLnWt015 acLnWt018 acLnWt020 acLnWt025 acLnWt030 acLnWt035 acLnWt040 acLnWt050 acLnWt053 acLnWt060 acLnWt070 acLnWt080 acLnWt090 acLnWt100 acLnWt106 acLnWt120 acLnWt140 acLnWt158 acLnWt200 acLnWt211) И затем уже эту константу указывать "вместо числа 5" Но как написать такую функцию? Попробовал поменять функцию: Код:
Последний раз редактировалось МишаИнженер, 02.12.2022 в 09:06. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627
|
Господи, зачем сложно-то так?
Получил вес линии из примитива - ну и закидывай его в CELWEIGHT. Хоть 5, хоть 5.0 - через (setvar ) любое сгодится, кроме "5.0" /текст/. Зачем здесь вообще эти внутренние переменные? И да - эта 5 сразу же будет соответствовать 0,05 - ничего дополнительно преобразовывать не нужно.
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 02.12.2022 в 09:08. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Пока печатал, код был изменен.
----- добавлено через ~3 мин. ----- Цитата:
----- добавлено через ~10 мин. ----- Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Ветвление необходимо для вывода отчета о назначенном значении в текстовом виде.
Программа постоянно отчитывается о том, что она назначает. Это очень удобно и коммуникабельно. Легко потом в листинге проверить что было назначено. ----- добавлено через ~4 мин. ----- Пользователь может ошибочно выбрать не тот объект, по которому ему надо настроить чертежные настройки. Если он захочет выбрать ещё раз нужный объект у него есть для этого возможность. Можно выбирать сколько угодно пока не выбрать пустоту экрана или нажать ESC (это тоже работает, проверял). В вашем коде немного мне понятно на 35%. Спасибо! Потом наверное разберусь получше. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Прошу помощи, при изменении веса линии ничего не меняется и мерцает перекрестие (Autocad 2017) | lopikolper | AutoCAD | 10 | 26.06.2018 14:59 |
Почему я делаю в автокаде линии триховые или оевые штрихпунктирные, а распечватываются сплошные?? | st7044 | AutoCAD | 8 | 21.06.2011 22:18 |
Почему при проставлении длины дуги линии выноски иногда идут по радиусам окружности, а иногда параллельны друг другу? | stumpel | AutoCAD | 2 | 16.06.2011 15:46 |
Непонятные линии призраки вновь, почему | dextron3 | AutoCAD | 11 | 24.03.2009 20:25 |
Почему field возвращает координаты объекта только в мировой системе координат? | stumpel | AutoCAD | 7 | 20.02.2009 12:43 |