Тема: LISP+DCL=зависание автокада. Помогите пожалуйста найти ошибки.
Написал небольшую программу, но она зависает при нажатии на кнопку "расчитать".
Самое интересно что если изменить запись
(action_tile "accept" "(statika)" )
вместо слова статика ввести другое например statik, то окно закрывается.
После этого ввожу в ком. строку (statika) и все нормально расчитывается.
ниже приведен код окна и лисп программы, может быть кто-то найдет ошибку.
и еще в этом же окне не могу нормально считать данные из эдит_бокс.
если начальное значение стереть и ввести заново, то считываются, а если просто нажать на кнопку расчитать не трогая поля эдит_бокс, то значения из них не считываются.
нашел пока один выход: нужно по всем ячейкам пройтись щелкая по клавише ТАВ
;: программа для статического расчета :: ;: плужных каналокапателей МК-19 МК-23 МД-12 :: ;: для запуска программы в командной строке :: ;: наберите STAT (creat in AutoCad 2008) :: ;:::::::::::::::::::::::::::::::::::::::::::::: (defun stat ( / dcl_id ) (if (< (setq dcl_id (load_dialog "d:\\stat\\dialog.dcl")) 0)(exit)) (if (not (new_dialog "stat" dcl_id)) (exit)) (action_tile "b11" "(set_tile \"hk\" \"0\") (set_tile \"bk\" \"0\") (set_tile \"m\" \"0\") (set_tile \"FL\" \"0\") (set_tile \"AL\" \"0\") (set_tile \"aotv\" \"0\") (set_tile \"ar\" \"0\") (set_tile \"fm1\" \"0\") (set_tile \"ky\" \"0\") (set_tile \"kr\" \"0\") (set_tile \"gb\" \"0\") (set_tile \"gm\" \"0\") (set_tile \"xr\" \"0\") (set_tile \"x1\" \"0\") (set_tile \"xm\" \"0\") (set_tile \"XL\" \"0\") (set_tile \"zc\" \"0\") (set_tile \"lb\" \"0\") (set_tile \"bg\" \"0\") ") ; конец action_tile "b11" (action_tile "b12" "(set_tile \"hk\" \"0.4\") (set_tile \"bk\" \"0.4\") (set_tile \"m\" \"1.25\") (set_tile \"FL\" \"40\") (set_tile \"AL\" \"40\") (set_tile \"aotv\" \"40\") (set_tile \"ar\" \"40\") (set_tile \"fm1\" \"1.25\") (set_tile \"ky\" \"100\") (set_tile \"kr\" \"0.8\") (set_tile \"gb\" \"130\") (set_tile \"gm\" \"11\") (set_tile \"xr\" \"4.7\") (set_tile \"x1\" \"0.3\") (set_tile \"xm\" \"5\") (set_tile \"XL\" \"5.6\") (set_tile \"zc\" \"0.3\") (set_tile \"lb\" \"3\") (set_tile \"bg\" \"0.3\") ") ; конец action_tile "b11" (action_tile "b13" "(set_tile \"hk\" \"0.45\") (set_tile \"bk\" \"0.45\") (set_tile \"m\" \"1.25\") (set_tile \"FL\" \"45\") (set_tile \"AL\" \"45\") (set_tile \"aotv\" \"45\") (set_tile \"ar\" \"45\") (set_tile \"fm1\" \"1.25\") (set_tile \"ky\" \"115\") (set_tile \"kr\" \"0.8\") (set_tile \"gb\" \"140\") (set_tile \"gm\" \"12\") (set_tile \"xr\" \"4.8\") (set_tile \"x1\" \"0.3\") (set_tile \"xm\" \"5.1\") (set_tile \"XL\" \"5.7\") (set_tile \"zc\" \"0.25\") (set_tile \"lb\" \"3.2\") (set_tile \"bg\" \"0.3\") ") ; конец action_tile "b12" (action_tile "b14" "(set_tile \"hk\" \"0.5\") (set_tile \"bk\" \"0.6\") (set_tile \"m\" \"1.25\") (set_tile \"FL\" \"35\") (set_tile \"AL\" \"40\") (set_tile \"aotv\" \"45\") (set_tile \"ar\" \"40\") (set_tile \"fm1\" \"1.25\") (set_tile \"ky\" \"105\") (set_tile \"kr\" \"0.8\") (set_tile \"gb\" \"130\") (set_tile \"gm\" \"11\") (set_tile \"xr\" \"4.9\") (set_tile \"x1\" \"0.3\") (set_tile \"xm\" \"5.2\") (set_tile \"XL\" \"5.8\") (set_tile \"zc\" \"0.3\") (set_tile \"lb\" \"3.45\") (set_tile \"bg\" \"0.3\") ") ; конец action_tile "b13" (action_tile "accept" "(statika)" ) ;конец action_tile (start_dialog) (unload_dialog dcl_id) (princ) );конец defun ;----------------------- Function's --------------------------------- (defun Stepen (a b) (exp (* b (log a))) ) (defun Tan (v) (/ (sin v) (cos v)) ) (defun KoordNew() (cdr (assoc 10 (entget (entlast)))) ) (defun KoordEnd() (cdr (assoc 11 (entget (entlast)))) ) ;-----------------д-жЁп Setting-------------------------------------- (defun Sett() (setq cmde (getvar "CMDECHO")) (setvar "CMDECHO" 0) (setq blmd (getvar "BLIPMODE")) (setvar "BLIPMODE" 0) (setq lun (getvar "LUNITS")) (setvar "LUNITS" 2) (setq lup (getvar "LUPREC")) (setvar "LUPREC" 3) ) ;-----------------д-жЁп Input_Fun------------------------------------ ; ;------------------------д-жЁп SetLayer------------------------------ ;(defun SetLayer(name) ;(command "layer" name "") ;) ;------------------------ д-жЁп Abcd --------------------------------- (defun Abcd() (setq fotv 90) (setq hp (* hk 2)) (setq zk (* 0.25 hk)) (setq ctgfl (/ 1 (* (/ (sin FL) (cos FL)) (sin AL))) ) (setq xk (* zk ctgFL)) (setq l (* 0.75 hp)) (setq hp2 (Stepen hp 2)) (setq hp3 (Stepen hp 3)) (setq zk2 (Stepen zk 2)) (setq zk3 (Stepen zk 3)) (setq a (- (/ ctgfl (Stepen (* -1 (- zk hp)) 2)) (/ (* 2 (- xk l)) (* -1 (Stepen (* -1 (- zk hp)) 3)))) ) (setq b (/ (- (/ ctgfl (- zk hp)) (* 3 a (+ zk hp))) 2) ) (setq c (- ctgfl (* 3 a zk2) (* 2 b zk) )) (setq d (- xk (* a zk3) (* b zk2) (* c zk) )) (setq a2 (/ (- AL aotv) (- (+ (* fotv fotv) (* FL FL) ) (* 2 FL fotv))) ) (setq a1 (- (* 2 a2 fotv) )) (setq a0 (+ aotv (* a2 fotv fotv) )) ) ;----------------------- Raschet ------------------------------- (defun Raschet() (setq pii (/ 180 pi)) (setq s (* hk (+ (* hk m) bk))) (setq r (* ky s)) (setq er (- 90 (+ ar (* (atan fm1) pii)))) (setq rv (* r (sin er))) (setq rg (* r (cos er))) (setq xc (* 0.25 lb) hz (* kr hk)) (setq r2 (/ (+ (* rv xr) (* gm xm) (- (* rg (+ hk zc (- hz))))) (+ xl (* fm1 (+ hk zc))) ) ) ;---R2 (setq r1 (- (+ gb gm rv) r2)) (setq aaa (+ (* rv (- xr xc)) (* gm (- xm xc)) (* gb X1) )) (setq bbb (+ (* rg (- hk hz)) (* r2 (- XL xc)) (* fm1 r2 hk) )) (setq xd (/ (- aaa bbb) r1)) (setq pmax (/ (* r1 (+ 1 (/ (* 6 xd) lb))) (* bg lb 2 1000))) (setq pmin (/ (* r1 (- 1 (/ (* 6 xd) lb))) (* bg lb 2 1000))) ) ;----------------------- Statika-------------------------------------- (defun Statika() (setq x 0.0 dx 0.0 dy 0.0 ) (Sett) (Abcd) (Raschet) ;(SetLayer "TEXT") (command "_.text" (list 533 353) 8 0 (rtos rv) ) (command "_.text" (list 480 267) 8 0 (rtos rg) ) (command "_.text" (list 443 335) 8 0 (rtos r) ) (command "_.text" (list 252 243) 8 0 (rtos r1) ) (command "_.text" (list 703 160) 8 0 (rtos r2) ) (command "_.text" (list 255 283) 8 0 (rtos xd) ) (command "_.text" (list 284 35) 8 0 (rtos pmax) ) (command "_.text" (list 275 20) 8 0 (rtos pmin) ) (command "_.pline" (list 112 315) (list 112 235) (list 341 274) (list 341 315) "") (command "_.text" (list 80 235) 8 0 pmax) (command "_.text" (list 345 225) 8 0 pmin) (setvar "CMDECHO" cmde) (setvar "BLIPMODE" blmd) (setvar "LUNITS" lun) (setvar "LUPREC" lup) (princ "OK") (princ) )
stat: dialog{label="Расчет плужного каналокапателя";is_bold="true";fixed_width = true; :text{label = " Выбирете данные для расчета ";fixed_width_font=true;alignment=centered;} :radio_row{key="b1"; :radio_button{label="Сброс"; key="b11";value="1";} :radio_button{label="МК-19"; key="b12";} :radio_button{label="МК-23"; key="b13";} :radio_button{label="МД-12"; key="b14";} } //конец радио кнопки :text{label = " Параметры канала ";fixed_width_font=true;alignment=centered;} :column{children_alignment=centered; fixed_width_font = true; :edit_box{label="Глубина канала (Нк), м";key="hk";value="";edit_width=10;action = "(setq hk (atof $value))";} :edit_box{label="Ширина канала по дну (В), м";key="bk";value="";edit_width=10;action = "(setq bk (atof $value))";} :edit_box{label="Коэф заложения откосов (m) ";key="m";value="";edit_width=10;action = "(setq m (atof $value))";} :edit_box{label="угол F1 в градусах";key="FL";value="";edit_width=10;action = "(setq FL (angtof $value 0))";} :edit_box{label="угол AL в градусах";key="AL";value="";edit_width=10;action = "(setq AL (angtof $value 0))";} } //column Параметры канала :text{label = " Параметры рабочего органа и грунта ";fixed_width_font=true;alignment=centered;} :column{children_alignment=centered; :edit_box{label="Угол захвата верхних отвалов (Аотв), в град";key="aotv";value="";edit_width=10;action = "(setq aotv (angtof $value 0))";} :edit_box{label="Угол между силой R и горизонтом, в град";key="ar";value="";edit_width=10;action = "(setq ar (angtof $value 0))";} :edit_box{label="Коэф трения грунта о металл (fm1) ";key="fm1";value="";edit_width=10;action = "(setq fm1 (atof $value))";} :edit_box{label="Удельное сопротивение грунта копанию (ky), кН";key="ky";value="";edit_width=10;action = "(setq ky (atof $value))";} :edit_box{label="Коэф влияния св-в грунта на положение т.действия силы R (kr) ";key="kr";value="";edit_width=10;action = "(setq kr (atof $value))";} } //column Параметры рабочего органа :text{label = " Параметры машины ";fixed_width_font=true;alignment=centered;} :column{children_alignment=centered; :edit_box{label="Вес трактора в кН, (G)";key="gb";value="";edit_width=10;action = "(setq gb (atof $value))";} :edit_box{label="Вес рабочего органа в кН, (Gm)";key="gm";value="";edit_width=10;action = "(setq gm (atof $value))";} :edit_box{label="Расстояние от т. действия силы R до т. С (Xr), м";key="xr";value="";edit_width=10;action = "(setq xr (atof $value))";} :edit_box{label="Расстояние от оси Z до центра силы тяжести трактора (X1), м";key="x1";value="";edit_width=10;action = "(setq x1 (atof $value))";} :edit_box{label="Расстояние от т.С до центра силы тяжести раб.ограна (Xm), м";key="xm";value="";edit_width=10;action = "(setq xm (atof $value))";} :edit_box{label="Расстояние от т.С до точки приложения силы R2 (XL), м";key="XL";value="";edit_width=10;action = "(setq XL (atof $value))";} :edit_box{label="Расстояние от т.С до поверхности грунта (Zc), м";key="zc";value="";edit_width=10;action = "(setq zc (atof $value))";} :edit_box{label="База трактора (Lb), м";key="lb";value="";edit_width=10;action = "(setq lb (atof $value))";} :edit_box{label="Ширина гусеницы трактора (Bg), м";key="bg";value="";edit_width=10;action = "(setq bg (atof $value))";} } //column параметры машины :row{//label="Готово_Отмена"; fixed_width=true; //Минимальная ширина по объектам внутри alignment = centered;//Выровнян centered :ok_button{label="Расчитать"; key="accept"; is_default=true; //Срабатывает, если нажат Enter is_cancel =false; //Срабатывает, если нажат Х в правом верхнем углу is_tab_stop = true;//Фокус переключается между кнопками клавишей Tab fixed_width = true;//Ширина кнопки - по ширине надписи }//конец кнопки bt_Accept :button{ //кнопка key="bt_cancel"; label="Отмена"; is_default=false; is_cancel=true; is_tab_stop = true; fixed_width = true; }//конец кнопки bt_Cancel :button{ //Правая кнопка key="bt_help"; label="Помощь"; is_default=false; is_cancel=true; is_tab_stop = true; fixed_width = true; }//конец кнопки bt_Cancel }//конец Row }// конец stat
и еще напоследок вопрос, как сделать так чтобы определенные команды выводились на нужном слое в двг файле?
я это попробовал реализовать вот так
(SetLayer "TEXT") (defun SetLayer(name) (command "layer" name "") )
но оно работает не так как нужно, просто выскавает окно с выбором слоев и нужно нажимать ок на нужном слое, а хотелось бы это автоматизировать.