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

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

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

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

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


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


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

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


Код:
[Выделить все]
 (initget 1 "101 102 103 104 111 112")
(getkword "\nВыберите тип [101/102/103/104/111/112] <Отмена> : ")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей 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
С.-Петербург
Сообщений: 39,787


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


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


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


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


Цитата:
Сообщение от 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
Сообщений: 11,002


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

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


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


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


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

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


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


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


Код:
[Выделить все]
 (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
Сообщений: 11,002


Цитата:
Сообщение от 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
Сообщений: 11,002


Цитата:
Сообщение от 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
Сообщений: 11,002


Цитата:
Сообщение от 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 Динамические блоки 20 13.10.2005 09:36