LISP 程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;;一、绘制地形图符号

1.点状符号

对于点状符号,其位置固定,数量较多,且一般都带有一定的标注,可逐个制作属性块图元,单独插入。

2.线状符号

利用AutoCAD中强大的线型定义。

3.面状符号

由充填符号在面域内按一定的排列方式组合而成。

目前Auto CAD在建筑设计、工程施工放样得到广泛应用, Auto CAD在工程测量上的应用,大大减少手算坐标的工程量或帮助人们复核手算坐标的准确性。

(1)删除未选择对象

(defun c:sd()

(princ"\n选择要保留对象:")

(setq SS(ssget) ss1(ssget"X"))

(command"erase"ss1"r"ss""zoom _e)

);end

;;(2)画圆弧型铁路

;输入铁路中线上三个点,轨距及绘图比例尺,起、中、始点

(defun c:ytl()

(setvar "osmode" 0);取消扑捉

(setq PB(getpoint"\n输入起点:"))

(setq PM(getpoint"\n输入中点:"))

(setq PE(getpoint"\n输入终点:"))

(setq WD(getreal"\n输入铁路宽度(m):"))

(setq S(getreal"\n绘图比例尺=:"));1:1000,输入

(setq W1(/(* WD S) 2) W2(+ W1(* S)));轨道及枕木符号的半宽

(setq D(distance PB PE))

(setq A1(angle PB PM) A2(angle PB PE) A3(angle PE PB) A4(angle PE PM))

(setq FB(- A1 A2) FE(- A3 A4) P12(* PI 2))

(if (< FB 0)(setq FB(+ FB P12)));求PB和PE点的圆周角

(if (< FE 0)(setq FE(+ FE P12)))

(setq F(+ FB FE) R(/ D(* (sin F)2)));求全弧所对圆心角之半,圆弧半径

(setq F1(- (/ PI 2) F) ABC(- A2 F1))

(if (< ABC 0) (setq ABC(+ ABC P12)))

(setq C(polar PB ABC R));求圆心之点位

(setq ACB(angle C PB) ABC(angle PB C));起点左右垂直于中线切线的方位角

(setq ACM(angle C PM) AMC(angle PM C));中点左右垂直于中线切线的方位角

(setq ACE(angle C PE) AEC(angle PE C));终点左右垂直于中线切线的方位角

(setq PBL(polar PB ACB W1) PBL1(polar PB ACB W2))

(setq PBR(polar PB ABC W1) PBR1(polar PB ABC W2))

(setq PML(polar PM ACM W1) PMR(polar PM AMC W1))

(setq PEL(polar PE ACE W1) PER(polar PE AEC W1))

(setq S2(* S) S4(* S) S10(* 10 S))

(command "pline" PBL "w" S2 S2 "A" "S" PML PEL "");画左右铁路连线(command "pline" PBR "w" S2 S2 "A" "S" PMR PER "")

(command "pline" PBL1 "w" S4 S4 PBR1 "");画起点处枕木

(setq DF(/(* 10 S) R));求一个分段圆弧所对圆心角

(setq FF 0);动态分段圆弧之和,所对圆心角初值赋0

(while(< FF(* F 2))

(command "pline" PL "W" S4 S4 PR "");画分段处枕木

(setq FF(+ FF DF))

(setq ACP(- ACB FF) P(polar c ACP R))

(setq APC(angle P C)PL(polar P ACP W2) PR(polar P APC W2))

)

(PRINC)

);END

;;(3)弧度化度分秒函数

;;如弧度化为"",即20°23'50"

(defun dfm(hdj)

(setq jd(/(* hdj 180) pi))

(setq du(fix jd));截去小数,提取度数

(setq f1(* 60 (- jd du)))

(setq ff( fix f1));截去小数,提取分数

(setq mm(rtos(* 60 (- f1 ff)) 2 0));按四舍五入提取秒数

;;上面的du,ff是整型数,mm是字符串

(setq du(itoa du) ff(itoa ff));把du,ff转化为字符串

(if (<(strlen ff) 2);求ff长度

(setq ff(strcat "0" ff));如果ff长度小于2,执行此表达式

(setq ff ff);如果ff长度等于2,执行此表达式

)

(if (<(strlen mm) 2);求mm长度

(setq mm(strcat "0" mm));如果mm长度小于2,执行此表达式

(setq mm mm);如果mm长度等于2,执行此表达式

)

(setq jd(strcat du "." ff mm));把度,小数点,分,秒放在一个字符串中) ;end

相关文档
最新文档