dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

Autolisp ограничить ввод для пользователя

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 02.08.2018, 10:07 #1
Autolisp ограничить ввод для пользователя
protorgovec
 
газо- нефтепереработка
 
Уфа
Регистрация: 22.07.2015
Сообщений: 98

protorgovec вне форума Вставить имя

Добрый день форумчане. Подскажите пожалуйста. Нужно заставить пользователя выбрать один из предложенных вариантов:
Код:
[Выделить все]
 (initget 1 "01 02 03 04 11 21")
(setq Tip (atof (getkword "\n Тип фланца 01, 02, 03, 04, 11, 21 Tip >: ")))
все работает, но есть одна загвоздка. Если пользователь вводит 1, то присваивается 11, а если 2 то присваивается 21. Воспринимает сокращения. Как мне заставить пользователя прописывать только предложенные варианты, без сокращений? Заранее благодарю.
Просмотров: 2868
 
Непрочитано 02.08.2018, 10:15
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,522


Цитата:
Сообщение от protorgovec Посмотреть сообщение
Как мне заставить пользователя прописывать только предложенные варианты, без сокращений? Заранее
никак. У нормального пользователя не заложено писать лидирующие нули в числах) Сделайте диалог нормальный.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 10:20
1 | #3
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (initget 1 "101 102 103 104 111 112")
(getkword "\nВыберите тип [101/102/103/104/111/112] <Отмена> : ")
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.08.2018, 10:23
#4
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
никак. У нормального пользователя не заложено писать лидирующие нули в числах) Сделайте диалог нормальный.
Но у меня есть варианты именно такие. Перелопатил Полищука, но не нашел команды, которая бы воспринимала ввод пользователя без вариантов сокращения.
А как например тогда с такой строчкой:
Код:
[Выделить все]
 (initget 1 "10 12 100 120 1000 1200")
(setq Dy (atof (getkword "\n Длина, мм Dy >: ")))
введя 1, он примет первую по счету, т.е. 10, а у пользователя просто не нажалась вторая клавиша 2.
Как сделать что бы не воспринимал сокращения.
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 10:26
#5
Кулик Алексей aka kpblc
Moderator

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


Делай dcl - это будет проще всего.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 10:29
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,522


сделайте диалог.. на DCL в данном случае. Ну не будет пользователь в процессе реальной работы думать - в какой последовательности ему что нажимать. Голова у него совершенно другим занята в данный момент.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 10:40
#7
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 616


Цитата:
Сообщение от protorgovec Посмотреть сообщение
А как например тогда с такой строчкой:
Код:
(initget 1 "10 12 100 120 1000 1200")
(setq Dy (atof (getkword "\n Длина, мм Dy >: ")))
А вот так:
Код:
[Выделить все]
(initget 7)
(setq Dy (getint "\n Длина, мм Dy >: ")))
Setvar вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.08.2018, 10:42
#8
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код:
[Выделить все]
 (initget 1 "101 102 103 104 111 112")
(getkword "\nВыберите тип [101/102/103/104/111/112] <Отмена> : ")
Спасибо. Отличный вариант!

----- добавлено через ~1 ч. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Код:
[Выделить все]
 (initget 1 "101 102 103 104 111 112")
(getkword "\nВыберите тип [101/102/103/104/111/112] <Отмена> : ")
Подскажите пожалуйста. У меня после всех запросов определяются все величины. Как сделать, что бы после того, как сделались все вычисления и определенная величина (например (= Mb nil)), то программа прописывая, что данной конфигурации не существует, возвращалась к самому началу программы и начанала заново делать запросы?
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 12:10
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,522


переменная-флаг и цикл
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.08.2018, 12:17
#10
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
переменная-флаг и цикл
Спасибо. Структуру то я понял. Просто никогда не приходилось зацикливать программу, поэтому не понимаю что за функции использовать
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 12:20
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,522


просто большой цикл вокруг ввода данных и расчета, если расчет удался - флаг сбросили и очередной итерации не будет.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.08.2018, 12:26
#12
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
просто большой цикл вокруг ввода данных и расчета, если расчет удался - флаг сбросили и очередной итерации не будет.
я никогда ничего не зацикливал писал только для себя, и всегда точно знал что нужно вводить. А теперь коллеги просят для них, я в принципе не могу пока понять как зациклить
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 12:39
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,522


Код:
[Выделить все]
 (setq lFlagErr 1)
(while (= lFlagErr 1)
... Ввод данных
... Вычисление
... Если получен неправильный результат, то сообщение пользователю. Иначе  (setq lFlagErr 0)
) ; Завершение цикла
... Вывод результата правильного расчета
только по нормальному пользователю еще надо давать возможность выхода до завершения ввода всех данных (иначе превращается в квест), но диалогов вы боитесь, видимо)
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.08.2018, 13:12
#14
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Код:
[Выделить все]
 (setq lFlagErr 1)
(while (= lFlagErr 1)
... Ввод данных
... Вычисление
... Если получен неправильный результат, то сообщение пользователю. Иначе  (setq lFlagErr 0)
) ; Завершение цикла
... Вывод результата правильного расчета
только по нормальному пользователю еще надо давать возможность выхода до завершения ввода всех данных (иначе превращается в квест), но диалогов вы боитесь, видимо)
Большое спасибо. Получилось.
Код:
[Выделить все]
 (setq Rez 1)
(while (= Rez 1)
ввод данных
вычисления
(if (/= Mb nil) (setq Rez 0)))
Да, он просто перескакивает на начало программы если нет существующей конструкции. Ну, было бы не плохо перед этим что бы высвечивалось например что данной конструкции не существует, для продолжения нажмите интер. Но для меня это темный лес
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 13:20
#15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,522


Цитата:
Сообщение от protorgovec Посмотреть сообщение
высвечивалось например что данной конструкции не существует
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Если получен неправильный результат, то сообщение пользователю
Код:
[Выделить все]
 (if (= Mb nil)(alert "Данной конструкции не существует!"))
я то на лиспе не пишу, а вам то эти все базовые конструкции надо знать - чтобы не изобретать велосипеды в коде каждый раз)
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.08.2018, 13:23
#16
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Код:
[Выделить все]
 (if (= Mb nil)(alert "Данной конструкции не существует!"))
я то на лиспе не пишу, а вам то эти все базовые конструкции надо знать - чтобы не изобретать велосипеды в коде каждый раз)
Спасибо. Я знаю все эти конструкции. Но у нас проектировщики тетки работают, сейчас гост поменялся, они в панике, программно могут ввести не существующие данные для этого и ограничиваю их возможности
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 13:30
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,522


Цитата:
Сообщение от protorgovec Посмотреть сообщение
программно могут ввести не существующие данные
что-то сильно сомневаюсь, что тети-проектировщицы программно вообще чего то введут..) А вот чтобы в программу они не могли ввести левые значения - для этого и нужны нормальные диалоги, а не пошаговая стратегия в командной строке)
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.08.2018, 14:12
#18
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
что-то сильно сомневаюсь, что тети-проектировщицы программно вообще чего то введут..) А вот чтобы в программу они не могли ввести левые значения - для этого и нужны нормальные диалоги, а не пошаговая стратегия в командной строке)
Я не программист нормальные диалоги для меня темный лес пытаюсь сварганить на основании своих минимальных знаниях
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.08.2018, 14:31
#19
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,522


Цитата:
Сообщение от protorgovec Посмотреть сообщение
Я не программист
А хто тут программист?)

Цитата:
Сообщение от protorgovec Посмотреть сообщение
нормальные диалоги для меня темный лес
Ну так пришла пора - азы в картинках: тыц тыц
поверьте - проще разобраться с диалогами в лиспе, чем с тетями-проектировщиками - у которых вдруг что-то стало работать не так как раньше...
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 03.08.2018, 08:07
#20
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
А хто тут программист?)


Ну так пришла пора - азы в картинках: тыц тыц
поверьте - проще разобраться с диалогами в лиспе, чем с тетями-проектировщиками - у которых вдруг что-то стало работать не так как раньше...
Посмотрел, но тут же появилась загвоздка. По примеру все сделал, но при попытке просмотра DCL из редактора получаю в ответ:
предупреждение:не удается создать временный файл для DCL: "C:/Program Files/Autodesk/AutoCAD 2015/$vld$.dcl"
Что это означает? Сделал один в один как в уроке все
protorgovec вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp ограничить ввод для пользователя

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autolisp: как получить последний ввод (команду, координаты точек)? studentarh LISP 49 15.08.2013 11:52
Ввод объекта в эксплуатацию andrew.g Прочее. Архитектура и строительство 7 12.07.2013 16:28
DYNMODE (Системная переменная динамический ввод) sdv79 Справочник команд 0 10.06.2012 17:17
Приямок ("кессон") скважины водоснабжения. Гидроизоляция, ввод трубы. Андрей О Конструкции зданий и сооружений 2 27.05.2011 23:52
Динамический ввод или демонический ввод? TheBuTeK AutoCAD 20 13.10.2005 09:36

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||