newborn Posted March 15 Report Share Posted March 15 При запуске пишет неверный тип аргумента numberp nil. Подскажите, пожалуйста, с чем это связано? Я в этой теме вообще новичок (((( Программа с окном dcl и так-то и лично для меня много уже подфункций. + знаете как уменьшить масштаб размеров? - в автокаде приемлемо, но в нанокаде очень большие RCHsovstroknom.lsp OknoRCH.dcl Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 15 Report Share Posted March 15 А какое значение было в поле "Диаметр зенкера"? Quote Link to comment Share on other sites More sharing options...
newborn Posted March 15 Author Report Share Posted March 15 Ну предполагается что программа будет отрисовывать зенкер с любыми данными. Обычно ставлю для проверки 30 (все значения в мм) Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 15 Report Share Posted March 15 Спойлер Сугубо ИМХО - код написан так, что его хочется развидеть. Учитывая отсутствие отладчика, можно перед каждым назначением переменной или любой операцией с ней выполнять (princ (strcat ИмяПеременной (vl-princ-to-string ИмяПеременной))) и смотреть где и что отвалилось. Точнее, где переменная вдруг получила значение nil, хотя не должна. Quote Link to comment Share on other sites More sharing options...
lidia.antipina.ru Posted March 15 Report Share Posted March 15 Добавьте в начало для отладки (setvar "CMDECHO" 1) ;Управляет дублированием подсказок и ввода при выполнении команды AutoLISP. Quote Link to comment Share on other sites More sharing options...
lidia.antipina.ru Posted March 15 Report Share Posted March 15 Еще раздробить для начала длинные setq на кусочки Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 15 Report Share Posted March 15 (edited) Перед командами по отрисовке удалось найти две ошибки Спойлер к этой точке pt2 была неопределена. Решил, что можно pt2 заменить на c42 и Спойлер переменная a нигде и близко не упоминалась. "Поехали" - это мое отладочное сообщение Согласен с @kpblc, такой текст править - задание не для слабонервных. Больше искать не стал. Хорошо бы еще привести пример результирующего файла. Так же, не помешали бы подходящие значения в окошке по дефолту. А может даже есть рисунок с пронумерованными точками? Edited March 15 by EdwardSt 1 Quote Link to comment Share on other sites More sharing options...
lidia.antipina.ru Posted March 15 Report Share Posted March 15 Переменные, начинающиеся на DIM сравните, в частности DIMSCALE 5 часов назад, newborn сказал: + знаете как уменьшить масштаб размеров? - в автокаде приемлемо, но в нанокаде очень большие Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 15 Report Share Posted March 15 Чисто в качестве примера, как бы я писал код (времени нет, так что не до конца сделал): (defun c:window (/ fun_create-dcl fun_callback dcl_lst dcl_id dcl_res) (defun fun_create-dcl (/ dcl_file dcl_handle) (setq dcl_file (strcat (vl-string-right-trim "\\" (getenv "temp")) "\\dlg.dcl") dcl_handle (open dcl_file "w") ) ;_ end of setq (foreach item '("Okna: dialog{label = \"Параметры режущей части\";" ":column {" ": edit_box {label = \"Координата x\";key = \"xcoord\";edit_width = 3;}" ":edit_box {label = \"Координата y\";key = \"ycoord\";edit_width = 3;}" ":edit_box {label = \"Диаметр зенкера\";key = \"diam\";edit_width = 3;}" ":edit_box {label = \"Длина фаски\";key = \"chamfer_len\";edit_width = 3;}" ":edit_box {label = \"Ширина ленточки\";key = \"width\";edit_width = 3;}" ":edit_box {label = \"Длина державки\";key = \"len\";edit_width = 3;}" "}" "ok_cancel;" "}" ) (write-line item dcl_handle) ) ;_ end of foreach (close dcl_handle) dcl_file ) ;_ end of defun (defun fun_callback (key value ref-list / lst) (if (not (cdr (assoc key (eval ref-list)))) (set ref-list (cons (cons key (atof value)) (eval ref-list))) (set ref-list (subst (cons key value) (assoc key (eval ref-list)) (eval ref-list))) ) ;_ end of if (setq lst (eval ref-list)) (if (apply (function and) (apply (function append) (mapcar (function (lambda (x) ((cdr (assoc x lst))))) '("xcoord" "ycoord")) (mapcar (function (lambda (x) (and (cdr (assoc x lst)) (> (cdr (assoc x lst)) 0.)))) '("diam" "chamfer_len" "width" "len") ) ;_ end of mapcar ) ;_ end of apply ) ;_ end of apply (mode_tile "accept" 0) (mode_tile "accept" 1) ) ;_ end of if ) ;_ end of defun (defun fun_draw (data-list) (alert "Нужен результат!") ) ;_ end of defun (setq dcl_file (fun_create-dcl)) (if (setq dcl_id (load_dialog dcl_file)) (progn (new_dialog "Okna" dcl_id "(fun_callback $key $value 'dcl_lst)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (mode_tile "accept" 1) (setq dcl_res (start_dialog)) (unload_dialog dcl_id) (if (= dcl_res 1) (fun_draw dcl_lst) ) ;_ end of if ) ;_ end of progn ) ;_ end of if ) ;_ end of defun Код не проверял и не гонял: нужен конечный чертеж. Расшифровывать, в чем разница между a1, c11, cc1, cl и прочая - не хочу. 1 Quote Link to comment Share on other sites More sharing options...
newborn Posted March 15 Author Report Share Posted March 15 Проблема разрешилась, когда удалил в dcl ввод длины хвостовика и начал ввод через getreal. Там где-то было несоответствие типа переменной. Да, увидел момент с с42 и pt2. Программа реально страшная и собрана по частям из множества других + каких-то моих моих знаний полученных из 4 часов лр в универе, так что довольствовался тем, чем мог Спасибо :') Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 15 Report Share Posted March 15 Между прочим, код и в ACAD рушится в слюни. В мясо. В щщи. Вот мне интересно, что автор экономил, давая такие имена переменным? Нажатия клавиш? Спойлер Два объявления: Продается компьютерная мышь 2020 г.в.. Пробег 30 000 км и 5e16 кликов Продам клавиатуру, выпуск 01.2020. 2000 кликов. 2 Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 16 Report Share Posted March 16 10 часов назад, kpblc сказал: Между прочим, код и в ACAD рушится в слюни. Он и не мог не рушиться, т.к., как минимум, в операциях сложения и преобразования используются неинициализированные переменные. Предполагаю, что был сначала некий рисунок, в котором потом от руки были пронумерованы точки, придуманы зависимости в размещении этих точек относительно друг друга. А далее была только проблема не перепутать "c" (latinos) и "c" в именовании переменных, а также в порядке их инициализации. ЗЫ. Кстати, если предположение верно, то можно было бы посоветовать автору реализовать отрисовку этого изделия в виде параметрического объекта СПДС, т.к. именно параметрика проглядывается тут в чистом виде. ЗЫ2. Ну и заинтриговать народ, а потом сказать "всем спасибо, все свободны", не показав результата, это особый шик ))). Quote Link to comment Share on other sites More sharing options...
kpblc Posted March 16 Report Share Posted March 16 2 минуты назад, EdwardSt сказал: заинтриговать народ, а потом сказать "всем спасибо, все свободны", не показав результата, это особый шик Стандартное поведение, я уже особого внимания на это не обращаю Quote Link to comment Share on other sites More sharing options...
newborn Posted March 16 Author Report Share Posted March 16 5 часов назад, EdwardSt сказал: Ну и заинтриговать народ, а потом сказать "всем спасибо, все свободны", не показав результата, это особый шик ))). Исправляюсь) Конечно, можно было создать и так, но передо мной поставили задачу именно таким образом создать отрисовку осевого инструмента 5 часов назад, EdwardSt сказал: в виде параметрического объекта СПДС После того, как мой научрук увидел этот код, который изрядно нервов у меня потратил, он сказал, что стоит размеры поставить на одной линии (ну по госту) и добавить рамку с чертежом. Перове не знаю как реализовать, а со вторым категорически не согласен, т.к. этот код и так уже наладом дышит, а добавлять еще отрисовку рамки я не выдержу. Через блоки мб, но знаний нет أ‿أ P.S. Код в автокаде запускается только если добавить папку с окном и лсп в путь доступа вспомогательных файлах, в нанокаде как-то обошел, но нужно менять названия типа линий и заранее настраивать размерные стили P.S.S. Момент с описанием точек с23,с56 и т.д. достался мне по наследству из методички 95 года, он тогда еще на эвм считался))))))0) До одури обидно, что именно такая тема досталась мне, а разобраться понять никто не помогает, кроме вас всех.... OknoRCH.dcl Otrisovka.LSP 1 Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 16 Report Share Posted March 16 9 минут назад, newborn сказал: Исправляюсь) Честно говоря, это лучший из возможных ответов. Еще раз спасибо. 11 минут назад, newborn сказал: После того, как мой научрук увидел этот код, который изрядно нервов у меня потратил, он сказал, что стоит размеры поставить на одной линии (ну по госту) и добавить рамку с чертежом. Перове не знаю как реализовать, а со вторым категорически не согласен, т.к. этот код и так уже наладом дышит, а добавлять еще отрисовку рамки я не выдержу. Через блоки мб, но знаний нет أ‿أ Реализация через параметрический объект СПДС была бы самым красивым решением. Реализация с помощью лиспа - более универсальным. Если это дипломный проект, то времени уже может быть мало, да и рамки задания могут не распространяться на задействование функционала СПДС-модуля. Поэтому, сейчас уже легче допилить образмеривание и рамку с основной надписью. Специально для такого чертежа уместно подготовить шаблон *.dwt с настроенными стилями, слоями, блоками (включая блоки основной и боковых надписей). И в инструкции по использованию написать, что запускать нужно только на данном шаблоне. Иначе нужно усложнять программу контролем стилей, масштабов, наличием (включая создание) необходимых блоков и т.п. И для вводимых параметров желательно указать диапазон допустимых значений, а еще лучше добавить контроль введенных значений на предмет попадания в диапазон. Quote Link to comment Share on other sites More sharing options...
lidia.antipina.ru Posted March 16 Report Share Posted March 16 Набери "рамки", "штамп", "форматки", "основная надпись" и наверняка найдешь то, что надо даже дин. блоком. Как это еще никто в https://forum.nanocad.ru/index.php?/files/ не кинул? 1 Quote Link to comment Share on other sites More sharing options...
newborn Posted March 16 Author Report Share Posted March 16 Вообще на данный момент передо мной не стоит задачи рационализировать это решение. Из лиспа однозначно не уйду, потому что в этом вся соль. Сейчас нужно настроить размеры и рамку. Пока не могу понять, что от меня требует мой научный руководитель каким образом вставить рамку (надеюсь блоком, а не вписывать отрисовку рамки в программу). Требования к программе прямиком из детсада, потому что это не мой профиль. Мой диплом - создание технологического процесса обработки детали. Состоит он у меня из 60+ операций, среди которых присутствует зенкерование и этот несчастный зенкер. Просто в качестве НИР и элемента исследования мне предложили создать программу для его автоматической отрисовки - т.е. автоматизации работы технолога + добавить актуальность на фоне перехода из автокада в нанокад. Я, как образцово-показательный студент, не имел права отказаться. Подытоживая, для моей специальности - это реально нечто стоящее, но посидя на подобных форумах, я понял, что над этой прогой можно только посмеяться Однозначно апдейты по ней еще будут, т.к. нервов мне она еще помотает. Quote Link to comment Share on other sites More sharing options...
lidia.antipina.ru Posted March 16 Report Share Posted March 16 Прошло 20 с лишним лет, как навояла дисер на тему автоматизации ТП и станочных приспособ (думала, что тема уплывала окончательно, но надо перевернуть страницу и благополучно забыть), а воз и ныне там... Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted March 16 Report Share Posted March 16 8 минут назад, newborn сказал: Пока не могу понять, что от меня требует мой научный руководитель каким образом вставить рамку (надеюсь блоком, а не вписывать отрисовку рамки в программу). Однозначно, блоком. Т.к., потом этот чертеж может редактироваться. Работать с кучей отрезков, имеющих фиксированное взаимное положение, - это ад. Бывали случаи, когда отдельные проектировщики специально разбивали блоки и полилинии перед передачей заказчику, чтобы затруднить дальнейшую работу с исходниками. Не нужно такие решения тиражировать). Кроме того, используя блоки с атрибутами, можно сразу охватить и автоматизированное заполнение штампов. 12 минут назад, newborn сказал: предложили создать программу для его автоматической отрисовки - т.е. автоматизации работы технолога + добавить актуальность на фоне перехода из автокада в нанокад. Фишка в том, что написание лиспа - это автоматизация, но это решение универсальное для АС и NC, поэтому к переходу отношения не имеет. А предлагаемая мной выше тема с СПДС как раз может покрыть именно это требование. Кстати, там красиво решена и задача оформления форматок чертежа. добавлено через 2 минуты 3 минуты назад, lidia.antipina.ru сказал: Прошло 20 с лишним лет, как навояла дисер на тему автоматизации ТП и станочных приспособ (думала, что тема уплывала окончательно, но надо перевернуть страницу и благополучно забыть), а воз и ныне там... Ну, чисто с т.з. академического интереса или обучающего процесса - почему бы и нет?))) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.