⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b.lsp

📁 此代码为Lisp语言编写
💻 LSP
📖 第 1 页 / 共 5 页
字号:
(setq bzg 2 bzjc 2 bzjwc 5.0 bzjk 0.6 bzjj 0.7 bzs 2.0
      bzx 2.0 bznc 4.9 gbr 2.0 gbjc 3 bzd 1.0 bzw 1
      yjgzj 10 r_darc 8 h_rom 4 pw_a 0.3 bg_a 6
      gbh1 6.0 gbc1 8.0 gbc31 5 gbc32 5 gbc4 10
      dj_fdc 800 dj_n 10
)
(setq bl(getvar "USERR4"))
(setq sca_gj(getvar "USERR3"))
(setq Bsca(getvar "userr5"))
(if (= Bsca 0)(setq Bsca 1.0))
(setq sca_a (getreal (strcat "\n输入图幅比例<" (rtos Bsca 2 2) ">:")))
(if (not sca_a)(setq sca_a Bsca))
(setvar "userr5" sca_a)
(foreach x '(bzg bzjc bzjwc bzjk bzjj bzs bzx bznc gbr gbh1 gbc1
             gbc31 gbc32 gbc4 gbjc bzd r_darc h_rom pw_a bg_a)
    (set x (* (eval x) sca_a))
)
(vmon)(setvar "CMDECHO" 0)(regapp "BZ_GJ")(regapp "LBB_JS")
(if (= (getvar "handles") 0)(command "handles" "on"))
(if (not sca_gj)(setq sca_gj 10))
(setq pi2 (/ pi 2) pi3(* pi 1.5) pih(/ pi -2))
(defun tol(l) (/ l (* 0.1 bl)))
(defun pol(p1 al l) (polar p1 al (tol l)))
(defun po2(p1 a1 l) (polar p1 a1 (/ l coat)))
(defun pn2(p1 a1 l) (polar p1 a1 (* l coat)))
(defun po3(p1 a1 l) (polar p1 a1 (tol (/ l coat))))
(defun po4(p1 a1 l) (polar p1 a1 (/ l (cos a1))))
(defun ppt(p1 x y) (list (+ (car p1) x) (+ (cadr p1) y)))
(defun tan(x) (/ (sin x) (cos x)))
(defun tan1(x) (abs (/ (sin x) (cos x))))
(defun b_nc(x1 y1 x2 y2 x0)
;内插数值
	(if (= x1 x2)
               	y1
		(+ (* (/ (- y2 y1 0.0) (- x2 x1 0.0))(- x0 x1 0.0)) y1)
	)
)
(defun vtzh(zh kz ww / zhk zhl)
;桩号转换为字符串
;kz=1时前面加公里桩
        (setq zhk(fix (/ zh 1000))
              zhl(- zh (* zhk 1000))
        )
        (cond
                ((< zhl 10)(setq zhl(strcat "00" (rtos zhl 2 ww))))
                ((< zhl 100)(setq zhl(strcat "0" (rtos zhl 2 ww))))
                (t(setq zhl (rtos zhl 2 ww)))
        )
        (if (= kz 1)
                (strcat "K" (itoa zhk) "+" zhl)
                (strcat zhl)
	)
)
(defun zbzh1(pp zp p0 sal / xx yy)
;坐标系平移到P0点并逆时针旋转SAL角
       (setq xx(- (car pp) (car p0))yy(- (cadr pp) (cadr p0)))
       (list (list (+ (* xx (cos sal)) (* yy (sin sal)))
                   (- (* yy (cos sal)) (* xx (sin sal))))
             (- zp sal))
)
(defun zbzh2(p0 a0 pl al / xx yy) 
;已知局部坐标系原点P0 A0,返回局部坐标系中PL AL的绝对坐标及角度.
       (setq xx(- (* (car pl) (cos a0)) (* (cadr pl) (sin a0)))
             yy(+ (* (cadr pl) (cos a0)) (* (car pl) (sin a0))))
	   (list (list (+ xx (car p0)) (+ yy (cadr p0))) (+ a0 al))
)
(defun zy_lp(p1 p2 pp / aa pf ff)
;判断点PP在直线P1P2的右侧(返回1)左侧(返回-1)或是在直线上(返回0)
       (setq aa(angle p1 p2) pf(car (zbzh1 pp 0 p1 aa)))
       (if (> (cadr pf) 0) (setq ff -1))
       (if (= (cadr pf) 0) (setq ff 0))
       (if (< (cadr pf) 0) (setq ff 1))
	   ff
)
(defun lpqhz(p1 ang dis p3 / p0 p2 ll xx)
;判断点P3到线段P1P2的投影点位置
    ;-1:在P1后方,0在P1P2之间,1在P2前方
       (setq p2(polar p1 ang dis))
       (setq p0(car (zbzh1 p3 0 p1 ang)))
       (setq xx(car p0) xx(kj_my xx 0 0) xx(kj_my xx dis dis))
       (cond ((< xx 0) -1)
             ((> xx dis) 1)
			 (t (list (car p0) (abs (cadr p0))))
	   )
)
(defun cpqhz(p1 p2 pc r zy p3 / r p01 p02 a01 a02 a1 a2 a3 a12 a00 dc3 ff)
;判断点P3到弧线P1P2的投影点位置
       ;-1:在P1后方,0在P1P2之间,1在P2前方
       (setq a1(angle pc p1) a2(angle pc p2) a3(angle pc p3)
             p01(polar pc a3 r) p02(polar pc (+ a3 pi) r)
             dc3(distance pc p3))
       (setq a12(- a1 a2) a01(- a1 a3) a02(- a1 a3 pi)
             a12(bjr_a (* zy a12)) a01(bjr_a (* zy a01)) a02(bjr_a (* zy a02)))
       (setq a12(kj_my a12 (* pi 2) 0) a00(bjr_a (+ (/ a12 2) pi))
             a02(kj_my a02 (* pi 2) 0)  a01(kj_my a01 (* pi 2) 0)
             a01(kj_my a01 a12 a12) a02(kj_my a02 a12 a12)
             a01(kj_my a01 a00 a00) a02(kj_my a02 a00 a00))
       (if (<= a02 a12)(setq ff(list (* r a02) (+ dc3 r))))
       (cond ((<= a01 a12) (setq ff(list (* r a01) (abs (- r dc3)))))
             ((and (< a01 a00) (not ff))(setq ff 1))
             ((not ff)(setq ff -1)))
	   ff
)
(defun dislp(pt1 pt2 p1 / al p2)
;点到直线距离
       ;返回由垂直点及距离构成的表
       (setq al(+ (/ pi 2) (angle pt1 pt2))
			 p2(polar p1 al 1) p2(inters p1 p2 pt1 pt2 nil))
	   (list p2 (distance p1 p2))
)
(defun gjdw_a(x)
;求钢筋单位重,x:钢筋直径(mm).
	(cond ((= x 28) 4.833)
	  ((= x 30) 5.548)
	  ((= x 36) 7.989)
	  ((= x 38) 8.902)
	  ((= x 40) 9.863)
	  (t (fin (* x x pi 0.25 0.785 0.01) 3))
    )
)
(defun dtr(a) (* pi (/ a 180.0)));度化为弧度
(defun rtd(a) (* 180.0 (/ a pi)));弧度化为度
(defun ppt(p1 x y) (list (+ (car p1) x) (+ (cadr p1) y)))
;将点p1坐标分别加x,y.
(defun fin(x n) (read (rtos x 2 n)))
;将x精确到小数点后n位.
(defun asin(x)(if (< x 1) (atan (/ x (sqrt (- 1 (* x x))))) pi2))
;x的反正玄值(弧度)
(defun Cosh(x)
        (/ (+ (exp x) (exp (- x))) 2.0)
)
(defun dv(l d)(mapcar '(lambda (x) (/ x 1.0 d)) l))
;将表l各值分别除以d.
(defun lth(l n v / vj nn fl)
;将表l的第n项换成v.v=999时则去除l的第n项,v为表时则将l的第n项换成v内各项.
	(setq nn 0)
	(repeat (length l)
		(if (= nn n)(setq vj v)(setq vj(nth nn l)))
		(if (/= (type vj) 'list)(setq vj (list vj)))
		(if (= (nth 0 vj) 999)(setq vj nil))
		(setq fl(append fl vj) nn(1+ nn))
	)
	fl
)
(defun lth(l n v / vj nn fl)
       ;将表L第N位改为V
       (setq nn 0)
       (repeat (length l)
       (if (= nn n)(setq vj v)(setq vj(nth nn l)))
       (setq fl(append fl (list vj)) nn(1+ nn)))fl
)
(defun lhw(l n1 n2 / vj nn fl)
;将表l第n1项和n2项互换.
	(setq nn 0)(repeat (length l)
	(cond ((= nn n1)(setq vj(nth n2 l)))
		  ((= nn n2)(setq vj(nth n1 l)))
		  (t(setq vj(nth nn l)))
	)
	(setq fl(append fl (list vj)) nn(1+ nn)))
	fl
)
(defun rtos1(v1 bzw1 / s nn co i)
	(setq s(rtos v1 2 bzw1) nn(strlen s) co (substr s nn) i 0)
	(while (and (= co "0") (< i bzw1))
		(setq i(+ i 1)nn(- nn 1) co(substr s nn 1))
	)
	(cond
		((= i 0) s)
		((= i bzw1) (substr s 1 (- nn 1)))
		(t (substr s 1 nn))
	)
)
(defun ltype( / f s ltd l cl lp ct sl)
       (setq cl(getvar "clayer") lp 1 f 1)
       (while lp
              (setq s(tblnext "layer" f))
                    (if (= (cdr (assoc 2 s)) cl)
                        (setq ct(cdr (assoc 6 s)) lp nil))
              (setq f nil))
       (if (= ct "CONTINUOUS") (setq ct "32767")
           (progn
              (setq ct(strcat "*" ct))
              (setq f(open (findfile "acad.lin") "r") lp 1)
              (while lp
                     (setq s(read-line f))
                     (if (= (substr s 1 (strlen ct)) ct)
                         (setq ltd(substr (read-line f) 3) lp nil)))
              (close f)
              (setq ct "" s1 "")                     
              (while (/= ltd "")
                     (setq s(substr ltd 1 1) ltd(substr ltd 2))
                     (cond((and (= s ".")
                                (or(= s1 "") (= s1 ",")(= s1 "-")))
                            (setq ct(strcat ct "0.")))
                           ((= s ",")(setq ct(strcat ct " ")))
                           (t(setq ct(strcat ct s))))
                     (setq s1 s))
              ))
			  (read (strcat "(" ct ")")))
(defun curv1(f from to ss / l n s n1 n2 len)
  ;F:函数表达式,F(L)返回L处XY构成的表
  ;FROM,TO:函数F的起终点
  ;SS:步长
  ;BP,AL:曲线起点坐标,角度
       (setq l(ltype) n(length l) s(getvar "ltscale") n1 0)
       (setq from (float from) to (float to))
       (while (< from to)
              (setq ft from len (* s (nth n1 l)))
              (cond ((> len 0.0)
                     (if (> ss len) (setq ss len))
                     (setq n2 0)(command "pline")
                     (while (and (< n2 len)(<= from to))
                            (command (car (f from)))
                            (setq n2(+ n2 ss) ft from from(+ ss from))
                            (if(and (< (- from ss) to)(> from to))
                               (setq from to ft from)))
                     (setq from(+ (- from n2) len))
                     (if (< from to)(command (car (f from))))
                     (command ""))
                    ((< len 0.0)(setq from(- from len)))
                    ((= len 0)(command "point" (car (f from))))) ;end of cond
              (setq n1(1+ n1))
              (if (= n1 n)(setq n1 0))) ;end of while
       (if (< ft to)(command "pline" (car (f ft)) (car (f to)) ""))
	   (princ)
)
(defun read-list(f / str)
;从由F打开的文件中读入一行字符串并转化为表(以" "为分隔符)
	(setq str(read-line f))
    (if str
		(read (strcat "(" str ")"))
    )
)                                                           
(defun px_a(ll / nn n1 n2 fl nj xj)
;;将表l由大到小排序.
	(setq nn(length ll) n1 0 fl ll)
	(repeat (- nn 1)
		(setq nj n1 n2(1+ n1))
		(repeat (- nn n1 1)
			(if (> (nth n2 fl) (nth nj fl))
				(setq nj n2))
				(setq n2(1+ n2))
			)
			(if (/= nj n1)
				(setq fl(lhw fl nj n1))
			)
			(setq n1(1+ n1)
		)
	)
	fl)
(defun displ(p1 pt1 pt2 / al p2)
;点p1到直线pt1,pt2的距离.
	(setq al(+ pi2 (angle pt1 pt2))
              p2(polar p1 al 1) p2(inters p1 p2 pt1 pt2 nil)
	)
	(list p2 (distance p1 p2))
)
(defun displ1(p1 al pt1 pt2 / p2 pin)
;点p1按al角到直线pt1,pt2的距离.
    (setq p2(polar p1 (dtr al) 1))
    (list (setq pin(inters p1 p2 pt1 pt2 nil)) (distance pin p1))
)
(defun dhp(jd hp / al jd1 jd2 jd3 jdc)
;绘坡度
        (setq hp1(atan hp))
        (if (> hp 0) (setq al(+ pi hp1)) (setq al hp1))
	(setq jd1(polar jd al -6) jd2(polar jd1 al 10)
		  jd3(polar jd2 al bzjc) jdc(ppt jd 0 bzjj)
	)
	(command "pline" jd1 "W" 0 0 jd2 "W" bzjk 0 jd3 "")
        (command "text" "C" jdc bzg (rtd hp1) (strcat (rts (* 100 (abs hp))) "%"))
)
(defun stsl1(s / ll_a n1_a n_a v1_a v2_a co_a loop_a)
;将字符串s转化为表.如字串含x号,则x号前为基数,x号后为个数.
	(setq n1_a(strlen s) loop_a "T" n_a 1)
	(while (and (< n_a n1_a) loop_a)
		(setq co_a(substr s n_a 1))
		(if (= (strcase co_a) "X")
			(setq v1_a(stv (substr s 1 (- n_a 1)))
				  v2_a(stv (substr s (+ 1 n_a) (- n1_a n_a)))
				  loop_a nil)
		)
		(setq n_a(1+ n_a))
	)
	(if loop_a (setq ll_a (list (stv s)))
	(repeat (fix v2_a) (setq ll_a(append ll_a (list v1_a)))))
)
(defun stsl(s n_a / l1_a l2_a n1_a n2_a ss_a)
;将字符串或数值s转化为表.如字串含x号,则x号前为基数,x号后为个数.
;n_a:表长度.如转化的表长小于n_a,则用最后一个数补足.
	(cond ((= (type s) 'str)
               (setq l1_a(stl s)))
              (t (setq l1_a(list (rtos (rtv s) 2 4))))
	)
	(setq n1_a(length l1_a) n2_a 0 l2_a nil)
	(repeat n1_a
		(setq ss_a(nth n2_a l1_a))
		(setq l2_a(append l2_a (stsl1 ss_a)))
		(setq n2_a(1+ n2_a))
	)
	(setq n2_a(length l2_a))
	(if (< n2_a n_a)
		(repeat (- n_a n2_a) (setq l2_a(append l2_a (list (last l2_a)))))
		l2_a
	 )
)
(defun vln(l n / vv nn)
;求表l的前n项和.
	(setq vv 0 nn 0)
	(repeat n (setq vv(+ (nth nn l) vv) nn(1+ nn)))
	vv
) 
(defun rts(x)
;将x转化为字符串.
;x可为字符串,数值.
	(cond ((= (type x) 'str) x)
		  ((or (= (type x) 'sym) (= (type x) 'list)) (rts (eval x)))
		  (t (if (= (type x) 'int) (itoa x) (rtos x 2 bzw)))
	)
)
(defun rtv(x)
;将x转化为数值.
;x可为字符串,数值.
	(cond
		((= (type x) 'str) (stv x))
		((or (= (type x) 'sym) (= (type x) 'list)) (rtv (eval x)))(t x)
	)
)
(defun ss__a(s / n_a)
;将表达式字符串s求值并转化为字符串
;若字符串以"="结尾则只去掉"=".
	(setq ff_a(substr s (setq n_a(strlen s)) 1))
	(if (= ff_a "=")
		(substr s 1 (- n_a 1))
		(rts (stv s))
	)
)
(defun ss0__a(s / n_a sb_a se_a)
;去掉字符串尾的"="和首尾括号.
	(if (= s "")(setq s " "))
	(setq se_a(substr s (setq n_a(strlen s)) 1))
	(cond
		((= se_a "=")
		 (substr s 1 (- n_a 1))
		)
		((str_be s)
		 (ss0__a(substr s 2 (- n_a 2)))
		)
		(t
		 s
		)
	)
)
(defun str_be(s / n_a sb_a se_a n[] co_a i_a)
;检查字符串s是否是否首尾多余括号
	(if (= s "")(setq s " "))
	(setq se_a(substr s (setq n_a(strlen s)))sb_a(substr s 1 1) n[] 1 i_a 1)
	(if (and (= sb_a "(")(= se_a ")"))
		(while (and (> n[] 0) (< i_a n_a))
			(setq i_a(1+ i_a) co_a(substr s i_a 1))
			(if (= co_a ")") (setq n[](- n[] 1)))
			(if (= co_a "(") (setq n[] (+ n[] 1)))
		)
	)
	(and (= n[] 0)(= i_a n_a))
)
(defun ss1__a(s / n_a ff_a)
;将x转化为字符串并去掉字符串尾的"]".
;x可为字符串,数值.
	(setq ff_a(substr s (setq n_a(strlen s)) 1))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -