|
本人制作一路桥专业使用的lisp函数,功能:依据输入的路线交点参数算要求点的坐标,并在绘图区绘出图形。! i( I* S: H+ S2 x" ^
但是在使用中发现多次发现,适合一次调用,多次调用时就出现计算坐标结果正确,但是就是部分点绘到一块去了(如图):, C; s( Z. Z n, v
问题出在使用自动序列时,第一次计算,计算的X、Y、方位角值均正确,绘出的图形也没有错误,可若是不重新启动CAD的话,再调用dqx命令就可能出现计算的坐标及方位角均正确,绘出的图形重叠显示。我试验三次的桩号间距分别为5、2.5、1,到桩号为1的时候就出现重叠了,再继续下去也是结果正确绘图重叠。特点好似桩号间距递增(如5、10、15、20……)不出现问题,但桩号间距递减(如10、5、2.5、1)就出现问题了。不能像CAD命令那样在不重启CAD的情况下多次使用。* L, `; X% j/ Q F" t
~" Y/ y, |( ?. [- W
) g1 K D7 q7 V5 a8 Z1 }: ~. d函数代码如下:(参数区我已经赋值)& Y$ X9 s* {5 ^$ d8 {0 Z+ T
(defun c:dqx( / qs qz qszb qs_a qsr qzr k ls ma mi dzh dzh1 jl j n )
; f6 {8 y( _/ c: z+ t$ h; I (setvar "cmdecho" 0)2 t4 e$ e; N5 d# u' ?; _) f
(princ "\n-------------------------------------------------------------")( Q0 p0 o+ T- c$ A d
(princ "\n (^_^) 于森制作,欢迎使用。[email protected] (^_^) ")! M- ^ E2 v, b8 u
(princ "\n-------------------------------------------------------------") N" W( B d- P% P
;(setq qs (getreal "\n输入曲线始点桩号:"))0 _: [, {1 a9 T6 [; N; _ n& ?
(setq qs 25650.926)
+ r& S4 f- m5 K' @, a/ O: |4 i- n+ Y ;(setq qz (getreal "\n输入曲线终点桩号:"))/ ?2 ^- Q, L8 u$ `' o7 m; ~
(setq qz 25900.926)
( V" y4 i9 ?) m9 s ;(setq qszb (getpoint "\n输入或拾取曲线始点坐标:"))
! O2 G$ ~- K: g (setq qszb '( 3252647.051 381399.471))
% ~7 s1 z" h4 H( j' I: |0 n ;(setq qs_a (getreal "\n输入曲线始点顺曲线桩号递增方向的计算方位角(弧度):"))- a2 Z: \- `" A3 d, ]
(setq qs_a 2.907134)
7 t2 m8 K( M6 f+ C' M6 k5 @ (if (> qs qz) (setq qs_a (+ qs_a pi)))
+ s4 C" Y/ ~. j v ;(setq qsr (getreal "\n输入曲线始点半径(半径=∞时为0):"))
6 B' X) Y4 Y: H/ g1 q5 ^( E6 N (setq qsr 3650). O1 X y4 c% |) [ Y* t
(if (= qsr 0) (setq qs_ql (/ 1 10000000)) (setq qs_ql (/ 1 qsr)))5 p* X+ c( D! w( m& t5 M7 C
;(setq qzr (getreal "\n输入曲线终点半径(半径=∞时为0):"))1 ]# y Z7 K% G9 p0 d3 S E) i* A
(setq qzr 1295.3) R- F r, v5 b1 V6 |3 Q' ]4 N
(if (= qzr 0) (setq qz_ql (/ 1 10000000)) (setq qz_ql (/ 1 qzr)))
& E3 G# b# w3 n4 J$ G ;(setq k (getreal "\n选择顺曲线桩号递增方向的转向[左(-1)\\右(1)]:"))
4 s+ v2 P+ p! B: K& x% H (setq k -1)2 C) X" }* g; x! M
(setq ls (- qz qs))! `7 G1 R& x) u. s' e
(setq dzh qs)
7 M$ I' C4 j$ x% ~, { o (setq ma (max qs qz) mi (min qs qz))! u! n8 `- |/ B6 n: G
(princ "\n-------------------------------------------------------------")
1 H4 P( \" t0 M& |; A, E1 c# O (princ "\n 开始桩号坐标计算,请输入曲线始点至终点间的桩号! "); T! l1 Z+ c1 m3 }* P- @+ g5 d, b, I6 U+ u
(princ "\n-------------------------------------------------------------")
! e" `5 `% A8 l [% T7 g: t (setq dzh (getreal "\n输入桩号[自动序列(-2)]:"))
! D0 X4 P% l* e (if (= dzh -2)
. x3 Q# L4 c* I (progn
, V4 e4 Q, w: r; p( H (setq jl (getreal "\n输入自动序列的桩号间距:"))
' G: k( F0 C4 g5 m7 ?, Y (setq j 0)
p( {! ]) k+ f6 N# c8 N (setq dzh (+ 10 (* 10 (fix (/ mi 10)))))
1 \; d6 L' H5 _# ]+ x" i (zbjs dzh)8 Z6 y4 `( s2 H
(setq n (- (fix (/ (- (fix ma) dzh) jl)) 1))# t/ ^0 F+ M4 m- m
(while (<= j n)
5 R2 D7 c! L) q% ~ (setq dzh1 (+ dzh (* j jl)))1 q n K7 U" I1 _* G$ j
(setq j (+ 1 j))
# H+ X' A0 N: k4 N5 I# D- U4 h6 T. R5 c (zbjs dzh1)2 `, L6 e8 S* f1 o6 S* H
), _2 m5 Y2 z: P( g% T: S- h
)) p; V7 n- U, K8 K
(setq dzh ma)
- H; r6 d* B' d6 W6 @7 q )
. e! x! g' c$ b: L (while (/= dzh -1)7 G# V9 K6 ~3 A) {9 y
(if (or (> dzh ma) (< dzh mi))
6 q- y8 E) E- q! K (princ "\n提示:输入桩号不在曲线始点至终点间,请重新输入!")6 [+ w. a! l; B, T6 ?
(zbjs dzh)$ c e9 L& a/ ^# U
)
! w3 u9 m& w9 w9 k (setq dzh (getreal "\n输入下一个桩号[放弃(-1)]:"))
9 }" x; J; i7 k) ` )4 A4 {8 Z3 {6 J' a6 R
(command "zoom" "e")/ p1 h; N1 B) F* A( {9 |
(setvar "cmdecho" 1)& Y' a. l3 O: N5 Z* s4 l- Z' m3 a' N8 j
(princ)
% U5 W! [+ O+ x ) _3 d+ s% G; @* t
(defun zbjs(zh / l a i ac as p a_f x y x1 y1 xy zh0 zh1 zh2 a5 a6 a7 )
$ T6 g" y" v7 P" V. W8 O (setq l (- zh qs))
3 `3 a6 F# u3 d0 j (setq a (list 1 2 3 4))+ E; G$ s8 B( z1 Q1 E1 _+ c8 R1 c& N
(setq i 1 ac 0 as 0)) Y0 L) m/ E8 m. \2 A; S
(setq xy (list "" ""))
& K: m u' _0 w3 X (while (<= i 4)0 B7 D8 f( f; t/ M* _
(setq p (+ qs_ql (* (/ (* (/ l 4) i) ls) (- qz_ql qs_ql))))
+ K" a! p _. ^* } (setq a_f (+ qs_a (* k (/ (* (+ p qs_ql) (* (/ l 4) i)) 2))))
( p4 I" X5 @( @" Q1 D3 t (if (= i 2) (setq ac (+ ac (* 2 (cos a_f))) as (+ as (* 2 (sin a_f)))))
3 R; Y+ j! A3 \3 O3 b0 A: w0 g* i (if (= (rem i 2) 1) (setq ac (+ ac (* 4 (cos a_f))) as (+ as (* 4 (sin a_f)))))# k; ?6 U2 a7 k- m! g
(setq i (1+ i))2 G& [& V+ y z: x$ X' l, Y! z6 b
)- ~, m" O; {, C2 S
(setq ac (+ ac (cos qs_a) (cos a_f)) as (+ as (sin qs_a) (sin a_f)))
: H- ~7 h4 U( B (setq x (+ (car qszb) (* (/ (abs l) 12) ac)))
% c1 r2 X: l+ i3 S! s4 f: R0 K8 h5 r# q (setq y (+ (cadr qszb) (* (/ (abs l) 12) as)))( n8 u3 @7 n7 c
;(setq x1 (rtos x 2 5) y1 (rtos y 2 5))0 ]# W9 Z( l7 W$ u4 K
(setq xy (list x y))/ V$ i0 n& e& q4 o+ h
(command "point" xy): r( U" l* o7 y" E
(setq zh0 (rtos (fix (/ zh 1000)) 2 0))
7 X, M+ W) w! P8 l2 v6 ^+ f9 R g (setq zh1 (rtos(- zh (* 1000 (fix (/ zh 1000)))) 2 3)) K" N6 b" |; |0 n. j0 R
(setq zh2 zh1). u2 E; a7 Z. k. ]* \0 a6 y4 C
(setq a5 a_f)
6 A; b) N. Z$ t& o0 e6 Y (if (> qs qz) (setq a5 (- a5 pi))): D2 t( k: Q Z% J. f$ [
(if (> a5 (* 2 pi)) (setq a5 (- a5 (* 2 pi))))+ w8 e2 ]* |$ b1 @4 M5 R9 B
(if (< a5 0) (setq a5 (+ a5 (* 2 pi))))
' T- v/ v; L; z( Z/ O S+ Q6 ^ (setq a6 (rtos a5 2 6))" x/ b1 x1 f+ D6 S
(setq zh1 (strcat " K" zh0 "+" zh1 " A=" a6 "r"))* h: e: V: v- K0 z+ v5 n
(setq a7 (rtos (- (* a5 57.295779513) 90) 2 6))6 s: l7 Y" X; O9 E
(command "text" xy "0.25" a7 zh1)2 j, d z1 `4 b# ~9 o% _* S8 z7 ~
(setq x1 (rtos x 2 4) y1 (rtos y 2 4)). r( [' i# |5 h8 |
(setq a5 (* a5 57.295779513))" y$ D$ T z. s3 Y1 `
(setq a5 (rtos a5 2 6))" G5 W. m1 Q& c3 z5 u/ o
(princ (strcat "\n结果:" " K" zh0 "+" zh2 " X=" x1 " Y=" y1 " A=" a5" 度\n" ))2 W. d% O! B' r1 R. q. A+ D
) |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|