首页 > 技术文章 > 【Visual Lisp】人机交互与数据处理(表除外)-lisp

Helchan 2015-02-28 10:36 原文

;;本专题所讲述的内容是人机交互以及常规数据处理技术
;;★★★01.人机交互★★★
;;△△△键盘输入交互△△△
(getint "请输入整数");;从键盘输入整数,如果不是整数则重复提示输入整数直到输入的是整数。类似的函数[输入整数 getreal][输入字符串 getstring][控制和输入关键字 initget getkword]

;;△△△数据输出△△△
(princ "The \"allowable\" tolerance is\"" fileDsc);;输出到文件中为 The "allowable" tolerance is" 反斜杆\表转义,但是返回值还是有斜杆,只有输出到文件中时无斜杆,而prin1和print则不管是输入到文件中还是返回值斜杆还是斜杆;对于prompt只能输出在命令行不能输入文件,反斜杆\同样与princ一样表示转义
(vl-prin1-to-string "c:\\");;返回 "\"c:\\\\\"" 类似于prin1的输出
(vl-princ-to-string "c:\\");;返回 "c:\\" 类似于princ的输出

;;△△△屏幕交互△△△
(getpoint);;屏幕取点返回点;类似的有[带基点出现矩形框取点 getcorner][两点取长度 getdist][输入十进制度或鼠标指定返回弧度 getangle getorient]
(polar pt ang dist);;根据点、方位角和距离求点[求两点距离 distance][两点连线的角度 angle][求交点 inters 最后一个参数为nil时交点可以在延长线上][对象捕捉获取特殊点 osnap][屏幕点两点取长度 getdist]
(trans '(1 2 3) 0 1);;将点从一个坐标系转换为另外一个坐标系内的点,也就是点的实际位置不变但是在不同的坐标系内点的坐标值不一样。


;;★★★02.数据处理★★★
(+ 1 2 3);;加法运算,同类的数的运算有[减 - ]、[乘 * ]、[除 / ]、[余数 rem ]、[最大公约数 gcd ]、[最大值 max ]、[最小值 min ]、[e的N次幂 exp]、[10为底N的对数 log]、[数的N次方 expt]、[开方 sqrt]、[绝对值 abs]、[是否是负数 minusp]、[数是否是0 zerop]、[是否是数 numberp]、[数转实数 float]、[数取整 fix]、[正弦 sin]、[余弦 cos]、[反正切 atan]
(quote a);;禁止求值,返回 a 也可以用 'a 表示,返回的也是a
(eval b);;对b求值,返回求值结果(setq a 3) (setq b 'a),返回值为3。
(type data);;返回data的数据类型,数据类型包括有图元名(ename)、外部objectArx应用程序(exrxsubr)、文件描述符(file)、整数(int)、表(list)、函数分页表(pagetb)、选择集(pickset)、浮点数(real)、safearray、字符串(str)、内部AutoLISP函数(subr)、符号(sym)、变体(variant)、从lisp中加载的用户定义函数(usubr)、Active对象(VLA-object)
(atom 'a);;判断是否是原子,是则返回T,否则返回nil
(null a);;判断是否为空,是空返回T,否则返回nil
(boundp 'a);;判断是否非空,非空返回T,否则返回nil。例子(setq a 1) (boundp 'a) 返回T。注意格式,a前面有单引号
(equal 表达式1 表达式2 [允许误差]);;判断两个表达式的值是否在允许的误差范围内,如果是则返回T,否则返回nil

;;△△△转换△△△
(cvunit 1 "minute" "second");;单位转换,将1分钟转换为秒为单位的值60
(ascii "a");;将字符串字符转换为对应ascii码;[数字ascii码转对应字符的字符串 chr]
(itoa 123);;整数转字符串;[字符串转整数 atoi][字符串转实数 atof][根据模式和精度将数转换为字符串 rtos 互补函数为distof][弧度转指定模式角度的字符串 angtos 互补函数 angtof]

;;△△△字符串处理△△△
(strcat "ab" "c");;将几个字符串按先后顺序拼接为一个字符串"abc"
(substr "abcdef" 1 2);;截取字符串,序号从1开始
(strcase "abcDEF" T);;字符串大小写转换,此处是转换为小写,最后一个参数不写则转换为大写
(strlen "你123");;字符串长度
(wcmatch "A123sdfew" "A*");;字符串正则表达式匹配
(vl-string-elt "123abc" 3);;返回字符串内指定位置字符的ascii码值 97
(vl-string-left-trim "123456" "12b3456d");;删除第二个参数左边的在第一个参数字符串字符出现过的字符.也就是开始遍历第二个参数的第一个字符,如果在第一个参数字符串中有这个字符就删除,如果遇到遍历到的字符在第一个参数字符串中不存在此字符就停止遍历删除.就像此例的b,所以返回值是"b3456d"[类似的从右边来删除 vl-string-right-trim][两边都进行 vl-string-trim 相当于执行了前面两个函数]
(vl-string-mismatch "vl-abc" "vl-def");;返回字符串从指定位置开始字符相同的长度 3
(vl-string-position (ascii "a") "123abc");;返回指定ascii码值对应字符在字符串中的位置,从0开始.可以指定开始搜索的位置和是从左开始还是从右开始,默认从左从0开始
(vl-string-search "abc" "123abcdef");;搜索指定子串在字符串中出现的位置,可以指定搜索的开始位置.序号从0开始
(vl-string-subst "789" "abc" "456abc");;子字符串的替换,用"789"替换"456abc"中的"abc"返回"456789"
(vl-string-translate "abcABC" "123123" "A is a, B is b, C is C");;用第一个参数中的字符一一对应第二个参数中的字符替换第三个参数字符串返回"1 is 1, 2 is 2, 3 is 3"
(vl-string->list 字符串);;详见《表处理专题》

------end------

 

推荐阅读