|
本人制作一路桥专业使用的lisp函数,功能:依据输入的路线交点参数算要求点的坐标,并在绘图区绘出图形。
) T. W* R$ L3 m; ~+ U+ n& ?但是在使用中发现多次发现,适合一次调用,多次调用时就出现计算坐标结果正确,但是就是部分点绘到一块去了(如图):
+ E) E! h; C( O0 w问题出在使用自动序列时,第一次计算,计算的X、Y、方位角值均正确,绘出的图形也没有错误,可若是不重新启动CAD的话,再调用dqx命令就可能出现计算的坐标及方位角均正确,绘出的图形重叠显示。我试验三次的桩号间距分别为5、2.5、1,到桩号为1的时候就出现重叠了,再继续下去也是结果正确绘图重叠。特点好似桩号间距递增(如5、10、15、20……)不出现问题,但桩号间距递减(如10、5、2.5、1)就出现问题了。不能像CAD命令那样在不重启CAD的情况下多次使用。& r) t1 _0 N3 Y9 `) _& G0 X3 T
7 n) ^, |. i% m3 C1 w
/ {% W* H" Z# f4 {; n! Y函数代码如下:(参数区我已经赋值)
) ^2 C/ |. V7 B) L9 Q4 x(defun c:dqx( / qs qz qszb qs_a qsr qzr k ls ma mi dzh dzh1 jl j n )/ _: O) M/ ]. ~# C$ C: L
(setvar "cmdecho" 0)
, J$ t$ n$ l7 L; L, I6 c (princ "\n-------------------------------------------------------------")
4 ]* g# z8 {. _! x" z p, U O% ~ (princ "\n (^_^) 于森制作,欢迎使用。[email protected] (^_^) ")& a$ L; Z3 v- P5 l; ?, \
(princ "\n-------------------------------------------------------------")
% _: ^- _2 B+ q% p; Z3 X6 c ;(setq qs (getreal "\n输入曲线始点桩号:"))
( r5 g8 L; J6 [0 t8 ?" c (setq qs 25650.926)
* k W$ ~5 W3 T; v$ g# _6 ` ;(setq qz (getreal "\n输入曲线终点桩号:"))4 Q1 q7 o$ K6 e9 v: P$ p, a4 j
(setq qz 25900.926)5 @! g; `8 F) I2 ~
;(setq qszb (getpoint "\n输入或拾取曲线始点坐标:"))* D8 }8 a. }/ a1 P# o; ~
(setq qszb '( 3252647.051 381399.471))
7 P& m( T& t: B, j T: }+ i ;(setq qs_a (getreal "\n输入曲线始点顺曲线桩号递增方向的计算方位角(弧度):"))
9 h' q A' n& y6 ~. U (setq qs_a 2.907134)
7 J. `( r" k+ x \: [) u7 A/ g (if (> qs qz) (setq qs_a (+ qs_a pi)))$ y; U, t8 P& ~
;(setq qsr (getreal "\n输入曲线始点半径(半径=∞时为0):"))
$ a) f4 A" D+ q" n6 N (setq qsr 3650)" F1 t' Y6 e# Z. ?
(if (= qsr 0) (setq qs_ql (/ 1 10000000)) (setq qs_ql (/ 1 qsr)))/ w& u$ e( O$ t- u; h# X
;(setq qzr (getreal "\n输入曲线终点半径(半径=∞时为0):"))$ N- s* U$ a3 M+ C! z) B0 o
(setq qzr 1295.3)
9 J: n1 l& b/ N$ Y$ B (if (= qzr 0) (setq qz_ql (/ 1 10000000)) (setq qz_ql (/ 1 qzr)))
5 d. N, {' H; B+ \9 |6 G- R ;(setq k (getreal "\n选择顺曲线桩号递增方向的转向[左(-1)\\右(1)]:"))
+ G% F7 q. O u9 o) p8 d (setq k -1)
% y, w9 h4 H6 U5 y (setq ls (- qz qs))4 R* a8 a2 _8 n( G: v# _5 t4 }1 m4 A
(setq dzh qs)
) V7 M! V# t6 R$ T0 _ (setq ma (max qs qz) mi (min qs qz))
+ n6 B4 i5 [; S' _& h' P7 U (princ "\n-------------------------------------------------------------")
# {5 ]* d* z5 R4 {9 _ (princ "\n 开始桩号坐标计算,请输入曲线始点至终点间的桩号! ")
& ^ j- n& W4 l7 o1 F( W% Y( @& ] (princ "\n-------------------------------------------------------------") K0 q" E# [1 ]% B. Y
(setq dzh (getreal "\n输入桩号[自动序列(-2)]:"))* I' K# N# S+ x3 Y' w
(if (= dzh -2): c8 M4 d) i ?# }
(progn
* Q% b3 w1 a" J, t" }/ T$ I6 ?9 X (setq jl (getreal "\n输入自动序列的桩号间距:"))$ }4 y; l) \5 K' M$ p6 C
(setq j 0)7 S3 e& t/ k) [! [- a
(setq dzh (+ 10 (* 10 (fix (/ mi 10)))))
8 r1 e( r4 F; w! r (zbjs dzh)% f) p: R& `% _( m
(setq n (- (fix (/ (- (fix ma) dzh) jl)) 1))
' {& v" t* k$ D( T: f' U8 e: |, u (while (<= j n) d! l2 u+ n& E/ ^4 s4 q
(setq dzh1 (+ dzh (* j jl)))
& _) L4 b* _: b- p# ^; z. S# F (setq j (+ 1 j))! b6 H" v1 U p9 O
(zbjs dzh1)- r2 K2 y7 B7 ?2 H/ |* N
), a" R! I6 T/ g& v9 c. j. V
)
9 L- [( N- S3 O4 y3 z (setq dzh ma)! C. S) L8 b; p4 ?' \' C
)4 x( w4 m4 T4 x- [9 a9 Q
(while (/= dzh -1)
; r" I( H8 I: l. `& m9 c (if (or (> dzh ma) (< dzh mi))! i- L# A+ w' r8 Y! |
(princ "\n提示:输入桩号不在曲线始点至终点间,请重新输入!") h% D+ e, Z3 p Z$ y
(zbjs dzh)
. R, ^; V% i: D: Q5 V% V )
! v5 a4 ^" I: {6 C: k (setq dzh (getreal "\n输入下一个桩号[放弃(-1)]:"))
" d0 i [, }4 {( m B )
( n. v2 S$ {: `9 K (command "zoom" "e")* t0 G- b' d: P3 Q/ H
(setvar "cmdecho" 1)
3 F1 y L1 K9 K# i (princ)3 l' |9 q7 n$ N6 u0 K( k8 c+ R4 ~
)
8 s+ K9 G0 X) v# G(defun zbjs(zh / l a i ac as p a_f x y x1 y1 xy zh0 zh1 zh2 a5 a6 a7 )
3 a3 |- j! i% U+ W (setq l (- zh qs))) m i7 C$ {* F" D" l
(setq a (list 1 2 3 4))
- ]: @' J j D1 x3 j (setq i 1 ac 0 as 0)
- @. i3 E, e8 N! v (setq xy (list "" ""))$ @* g, z) r9 G' [$ _) z4 w; s
(while (<= i 4)
7 k" _1 ~+ g9 C/ z+ V7 J. [ (setq p (+ qs_ql (* (/ (* (/ l 4) i) ls) (- qz_ql qs_ql))))7 I5 c& t( {5 k/ ?: T+ x, x9 t2 \: u6 s
(setq a_f (+ qs_a (* k (/ (* (+ p qs_ql) (* (/ l 4) i)) 2))))
1 }, K1 W" c5 r/ l8 w* H& A# L/ } (if (= i 2) (setq ac (+ ac (* 2 (cos a_f))) as (+ as (* 2 (sin a_f)))))
$ U5 q2 J( m2 ?& s- P+ }, q (if (= (rem i 2) 1) (setq ac (+ ac (* 4 (cos a_f))) as (+ as (* 4 (sin a_f)))))
. H8 h& E: \' G4 p; V) q0 Y (setq i (1+ i))0 D/ G; C0 O+ \. R
)
9 {- s, @( B" H$ ^& ?4 g* q4 w (setq ac (+ ac (cos qs_a) (cos a_f)) as (+ as (sin qs_a) (sin a_f)))
/ y% `/ K& W; ?7 k/ Z+ \! R8 h (setq x (+ (car qszb) (* (/ (abs l) 12) ac)))
" _) y$ C6 ]: w! H2 z% z (setq y (+ (cadr qszb) (* (/ (abs l) 12) as)))
; l$ e( G/ P: z) m6 R* O8 Y# O ;(setq x1 (rtos x 2 5) y1 (rtos y 2 5))
% f+ @5 K$ B, R4 t8 h- N% S (setq xy (list x y))
2 W% d8 k0 h$ H4 ?: \" |7 d, B (command "point" xy)
; p8 ?) ^% A* N4 r6 W (setq zh0 (rtos (fix (/ zh 1000)) 2 0))" b* h4 `: p& P4 a7 ^
(setq zh1 (rtos(- zh (* 1000 (fix (/ zh 1000)))) 2 3))
- S% p. J, S5 s+ v0 u8 u (setq zh2 zh1)1 P: D# w4 D7 D4 q2 N1 A
(setq a5 a_f)
. X! V2 s4 `! C (if (> qs qz) (setq a5 (- a5 pi)))
2 U+ u. W4 ^& C5 k) W& c# ?! m( K$ T (if (> a5 (* 2 pi)) (setq a5 (- a5 (* 2 pi))))
& q2 {' E5 y5 U (if (< a5 0) (setq a5 (+ a5 (* 2 pi))))5 m/ B. E. \, ]3 x4 F0 Y
(setq a6 (rtos a5 2 6))
& s5 u, P3 M. N- q" D$ p, Z (setq zh1 (strcat " K" zh0 "+" zh1 " A=" a6 "r"))
& W8 _. ~7 ~) D; t m (setq a7 (rtos (- (* a5 57.295779513) 90) 2 6))
* D4 I3 e6 \, U! R( I% d( I8 @: \ (command "text" xy "0.25" a7 zh1): F% { W! c( L5 n/ u, R
(setq x1 (rtos x 2 4) y1 (rtos y 2 4)): u- p# G# }. S" c: o. Y. J! B! d
(setq a5 (* a5 57.295779513))
; P% o5 ]5 w3 a0 N (setq a5 (rtos a5 2 6))
% P4 m6 \. Z. z4 q7 m* e (princ (strcat "\n结果:" " K" zh0 "+" zh2 " X=" x1 " Y=" y1 " A=" a5" 度\n" ))
% d. j: W! U, K ) |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|