|
本人制作一路桥专业使用的lisp函数,功能:依据输入的路线交点参数算要求点的坐标,并在绘图区绘出图形。7 d' u. [( Q* G
但是在使用中发现多次发现,适合一次调用,多次调用时就出现计算坐标结果正确,但是就是部分点绘到一块去了(如图):! d8 k2 B# k# k( Y
问题出在使用自动序列时,第一次计算,计算的X、Y、方位角值均正确,绘出的图形也没有错误,可若是不重新启动CAD的话,再调用dqx命令就可能出现计算的坐标及方位角均正确,绘出的图形重叠显示。我试验三次的桩号间距分别为5、2.5、1,到桩号为1的时候就出现重叠了,再继续下去也是结果正确绘图重叠。特点好似桩号间距递增(如5、10、15、20……)不出现问题,但桩号间距递减(如10、5、2.5、1)就出现问题了。不能像CAD命令那样在不重启CAD的情况下多次使用。
& V2 X. O% q. W" L3 D+ X: q- `; O$ [# \' ]3 S9 f; I! b0 u
9 l7 H6 ?. ~3 |2 Q" }
函数代码如下:(参数区我已经赋值)
' B% U4 ?; f% r9 |$ x/ i2 T" D(defun c:dqx( / qs qz qszb qs_a qsr qzr k ls ma mi dzh dzh1 jl j n ), Q. w. v( [: K. Y
(setvar "cmdecho" 0) t0 _) g# i9 j5 r
(princ "\n-------------------------------------------------------------")& W& _$ `% ? P# C. v& J& Q
(princ "\n (^_^) 于森制作,欢迎使用。[email protected] (^_^) "). {! i: D) q6 @! v y# M4 K
(princ "\n-------------------------------------------------------------")! b# d- \" I# e
;(setq qs (getreal "\n输入曲线始点桩号:")): D8 ^. h! I1 A" Y
(setq qs 25650.926)) K# r; `4 u) i0 i# `7 \6 e
;(setq qz (getreal "\n输入曲线终点桩号:")) p' `1 L ?& {- z* H7 W8 ~
(setq qz 25900.926)
% P {: ^! h4 d6 r- M0 ]* ~ ;(setq qszb (getpoint "\n输入或拾取曲线始点坐标:")) ~9 l1 }3 I/ y! ?6 I1 E
(setq qszb '( 3252647.051 381399.471))
5 ^) w) C$ X! e3 z5 K! e% Q+ b ;(setq qs_a (getreal "\n输入曲线始点顺曲线桩号递增方向的计算方位角(弧度):"))
$ O( C# Q" B$ M& d2 O) d E5 E' j (setq qs_a 2.907134)' R5 \$ q4 M) _6 j' g& J' |
(if (> qs qz) (setq qs_a (+ qs_a pi)))3 b$ a5 a; A/ x# y2 ~
;(setq qsr (getreal "\n输入曲线始点半径(半径=∞时为0):"))
7 x p' Q' m X' P (setq qsr 3650)! a7 M2 q2 G g6 w* d
(if (= qsr 0) (setq qs_ql (/ 1 10000000)) (setq qs_ql (/ 1 qsr)))
% g: f& v: _7 x3 {6 ` ;(setq qzr (getreal "\n输入曲线终点半径(半径=∞时为0):"))8 b2 Q4 T1 t3 n
(setq qzr 1295.3)
1 q2 y8 I; o Q; @, p (if (= qzr 0) (setq qz_ql (/ 1 10000000)) (setq qz_ql (/ 1 qzr)))
# O8 I$ X+ v& Z) W ;(setq k (getreal "\n选择顺曲线桩号递增方向的转向[左(-1)\\右(1)]:"))
/ I$ z% X( e: @* Q9 v4 {% V" A9 E (setq k -1)
* d! Q7 M! v/ ?- j/ u! k* G1 a (setq ls (- qz qs))( y b) E# }- v( K' N, H, S$ K
(setq dzh qs)$ Y: k) U- M) m- s( h1 w3 c
(setq ma (max qs qz) mi (min qs qz))5 P: g$ [: Q& p* y6 C4 Y
(princ "\n-------------------------------------------------------------")* n- d1 m5 }: m' E6 }
(princ "\n 开始桩号坐标计算,请输入曲线始点至终点间的桩号! ")+ m7 {8 R, ?+ ~; L+ m4 n
(princ "\n-------------------------------------------------------------")
0 G& C9 k, e8 ~ (setq dzh (getreal "\n输入桩号[自动序列(-2)]:"))
6 j- A+ {) W* n. } (if (= dzh -2)
3 Y2 ?# L2 d6 m* J; `( r (progn; R0 W6 X6 c7 U+ l1 _" z
(setq jl (getreal "\n输入自动序列的桩号间距:")) m8 l* d( F- t2 T. ~8 n7 ?# B
(setq j 0)9 ^$ O* G: ~9 V7 h: | f
(setq dzh (+ 10 (* 10 (fix (/ mi 10)))))+ x, F, j8 A- g
(zbjs dzh)" n/ [" B. f* e. A& s
(setq n (- (fix (/ (- (fix ma) dzh) jl)) 1)). j: q7 E4 }5 J2 n: H5 W& x% T
(while (<= j n)
! R8 H0 h6 \/ [. M (setq dzh1 (+ dzh (* j jl)))
: t1 A' Z6 K0 m5 ]: F (setq j (+ 1 j))% f0 }7 A6 w) B' ~6 X0 \; F
(zbjs dzh1)
?5 K c; W# s )
$ g5 T) f X8 J' B# C )1 x) `2 W, g5 v/ y
(setq dzh ma)& T1 C* R1 @5 G+ i) m; n
)
+ L6 w( f% u, o, L2 Z (while (/= dzh -1)! T4 G. b4 `0 i5 W
(if (or (> dzh ma) (< dzh mi))
* r" y: t7 J, p: |5 O5 Y (princ "\n提示:输入桩号不在曲线始点至终点间,请重新输入!")
4 N0 T4 ~5 s! O3 h (zbjs dzh)
+ i9 v/ g, ^$ H4 D' C )' h& U5 w+ T. |1 Q
(setq dzh (getreal "\n输入下一个桩号[放弃(-1)]:"))
. f$ j7 x1 {( k) `8 x% m ) ~+ J* f3 N3 m% c; S& A/ {
(command "zoom" "e"), P9 r4 z- `+ c7 C- g
(setvar "cmdecho" 1)
$ q: R; k/ l% s* |) y- U4 G (princ)' v8 M$ a& o7 Q- M# _6 B$ ?
)
8 ?4 @: T1 n$ k. h9 M(defun zbjs(zh / l a i ac as p a_f x y x1 y1 xy zh0 zh1 zh2 a5 a6 a7 )
) R, E8 E8 V; d# t8 g (setq l (- zh qs))$ p( v, U1 O8 C
(setq a (list 1 2 3 4))1 k) b" K( m( j$ R6 }# U
(setq i 1 ac 0 as 0)
- N( c2 b+ F/ c! c C5 k k (setq xy (list "" ""))
G8 P2 ~( r0 P (while (<= i 4)2 m ?# h0 s* s
(setq p (+ qs_ql (* (/ (* (/ l 4) i) ls) (- qz_ql qs_ql))))
- q, ~8 j- @3 P/ c4 p$ u (setq a_f (+ qs_a (* k (/ (* (+ p qs_ql) (* (/ l 4) i)) 2))))$ r+ o, B' m2 O+ n
(if (= i 2) (setq ac (+ ac (* 2 (cos a_f))) as (+ as (* 2 (sin a_f)))))
: G# ]) s7 q$ }- Q7 F, S (if (= (rem i 2) 1) (setq ac (+ ac (* 4 (cos a_f))) as (+ as (* 4 (sin a_f)))))
0 N$ C& Q% s0 u/ m0 @5 d2 N, H (setq i (1+ i))3 ^2 W; x% Z# s8 ^( S: c
)
- L9 x! F0 P1 [! F, R; i (setq ac (+ ac (cos qs_a) (cos a_f)) as (+ as (sin qs_a) (sin a_f)))1 v3 k F! Q" _' M* @% b
(setq x (+ (car qszb) (* (/ (abs l) 12) ac)))" K5 B# w' K' H1 k( i
(setq y (+ (cadr qszb) (* (/ (abs l) 12) as)))& R- N0 p1 _7 O- g0 z: p, j
;(setq x1 (rtos x 2 5) y1 (rtos y 2 5))
" h7 `+ t5 b( S" L7 w5 j5 t (setq xy (list x y))
; ]' u$ g/ c6 z. o& a5 l' f5 B (command "point" xy)4 a) L+ r `1 ?! {4 b
(setq zh0 (rtos (fix (/ zh 1000)) 2 0))
* F) |# }3 L O: @8 U9 c1 I (setq zh1 (rtos(- zh (* 1000 (fix (/ zh 1000)))) 2 3))
1 S+ k3 G2 g5 d6 Y' I% {+ D (setq zh2 zh1)
0 @0 c1 m2 g, l: `4 Y9 s& O; @ (setq a5 a_f)( K) ?5 Z! g8 k0 V
(if (> qs qz) (setq a5 (- a5 pi)))
& k/ R) [5 N7 R* @& P9 e8 Q/ V (if (> a5 (* 2 pi)) (setq a5 (- a5 (* 2 pi))))
4 F1 _( Y+ S$ g0 a1 g$ n (if (< a5 0) (setq a5 (+ a5 (* 2 pi))))% Q0 f8 ^' A+ [ u) S; n( a
(setq a6 (rtos a5 2 6))
, C4 ?7 U8 h4 G3 W (setq zh1 (strcat " K" zh0 "+" zh1 " A=" a6 "r"))' _, {$ {# p, M j3 ^2 c
(setq a7 (rtos (- (* a5 57.295779513) 90) 2 6))
% ^, f5 B. Z( v4 X (command "text" xy "0.25" a7 zh1): d$ j2 j. q) W% ~5 N3 O5 H
(setq x1 (rtos x 2 4) y1 (rtos y 2 4))
, i( C( y, v7 M( @3 T1 j (setq a5 (* a5 57.295779513))1 s" |) |! u F0 `& u$ A0 h0 g
(setq a5 (rtos a5 2 6))$ Q2 Y5 v3 u7 I
(princ (strcat "\n结果:" " K" zh0 "+" zh2 " X=" x1 " Y=" y1 " A=" a5" 度\n" ))( N8 C* ?- _2 m" F8 O! U# V( x
) |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|