Привет! У меня такая проблема, я на автолиспе написал програму Код | (DEFUN show (x y d1 d2 l1 l2 l3 / a b c d) (SETQ a (LIST x (+ y ( / d1 2)));координаты точки А b (LIST (+ x l1) (+ y (/ d1 2)));координаты точки В c (LIST (+ x l1 l2) (+ y (/ d2 2))); координаты точки С d (LIST (+ x l1 l2 l3) (+ y (/ d2 2))); координаты точки D ) ;(print "set in show") (COMMAND "layer" "new" "kontur" "color" 7 "kontur" "ltype" "Continuous" "kontur" "on" "kontur" "make" "kontur" "" "pline" (LIST x y) a b c d (LIST (+ x l1 l2 l3) y) "cl"; контур детали "revolve" a "" (LIST x y) (LIST (+ x l1 l2 l3) y ) "360" "" "layer" "new" "oss" "color" 1 "oss" "ltype" "Center" "oss" "on" "oss" "make" "oss" "" "pline" (LIST (- x 5) y) (LIST (+ x l1 l2 l3 5) y) "";ось вала )
(COMMAND "layer" "new" "dimlin" "color" 3 "dimlin" "ltype" "Continuous" "dimlin" "on" "dimlin" "make" "dimlin" "" )
;Ставим размеры (COMMAND "dimLinear" a b (POLAR a (/ Pi 2) 10) "dimContinue" c d "" "" )
;Ставим диаметр (COMMAND "dimLinear" (LIST (+ x(/ l1 2)) (+ y (/ d1 2))) (LIST (+ x (/ l1 2)) (- y (/ d1 2))) (LIST (+ x (/ l1 2)) (- y (/ d1 2))) "dimLinear" (LIST (+ x l1 l2 (/ l3 2)) (+ y (/ d2 2))) (LIST (+ x l1 l2 (/ l3 2)) (- y (/ d2 2))) (LIST (+ x l1 l2 (/ l3 2)) (- y (/ d2 2))) "zoom" "all" ) );конец
(DEFUN cin (/ l1 l2 l3 d1 d2) (INITGET 7) (SETQ l1 (GETDIST "\n Vvedite dliny fragmenta L1: ") l2(GETDIST "\n Vvedite dliny pervogo fragmenta L2: ") l3(GETDIST "\n Vvedite dliny pervogo fragmenta L3: ") d1(GETDIST "\n Vvedite diametr pervogo fragmenta D1: ") d2(GETDIST "\n Vvedite diametr vtorogo fragmenta D2: ")) (LIST d1 d2 l1 l2 l3) );конец функции
(DEFUN massa (d1 d2 l1 l2 l3 / v1 v2 v21 v22 v3) (SETQ v1 (* Pi 2 (/ d1 2) l1) v22(* Pi 2( / d1 2) l2) v21(* Pi 2 (/ d2 2) l2) v2 (/ 2 (+ v21 v22)) v3 (* Pi 2 (/ d2 2 ) l3) ) (/ (* 7.85 (+ v1 v2 v3)) 1000) );конец функции
(DEFUN C:main (/ size M No flag ans tr ans2) ;текст над размерной линией, а не в разрыве (SETVAR "DIMTAD" 1) ;текст вне размерных линий параллелен линиям (SETVAR "DIMTOH" 0) ;текст между размерными линиями горизонтален (SETVAR "DIMTIH" 0) ;Продление линии между выносными, если текст сбоку (SETVAR "DIMTOFL" 1) ;продолжение выносных лини й за размерными мм (SETVAR "DIMEXE" 1) ;отключение генерации допусков (SETVAR "DIMTOL" 0) ;размер стрелок (SETVAR "DIMASZ" 2) ;продолжение выносных линий за размерную (SETVAR "DIMEXE" 2) (SETQ flag T) (SETQ tr T) ;(print "main 1") (WHILE flag (INITGET 7) (SETQ No (GETPOINT "\nVvedite nachalnyu tochky:")) (SETQ size (cin))
(show (CAR No) ;(CADR No) (NTH 0 size) (NTH 1 size) (NTH 2 size) (NTH 3 size) (NTH 4 size) )
(print size)
(SETQ M (massa (NTH 0 size) (NTH 1 size) (NTH 2 size) (NTH 3 size) (NTH 4 size)
) ) (command M) (SETQ ans (GETSTRING "\n Povtorit? <Y/N>:")) (SETQ flag (OR (= ans "Y") (= ans "N"))) );конец цикла ;(PRIN 1) ); конец
|
Грубо говоря программа состоит из 3-х квадратов, мне нужно сделать так, программа чертит первый квадрат, запрашивает продолжить, если да, то чертит вотрой, если нет, то заново запрашивает пареметры для черчения 1 квадрата, ну и так все 3..... Немогли б вы помоч
|