新人最爱command
本帖最后由 yeahyeah 于 2013-8-10 17:36 编辑;作为一个初学LISP的新人,我认识到CAD基础命令、基础快捷键操作对编程的重要性。
;这是个相互促进、彼此弥补的过程。
;里面也遇到不少问题,希望有知道的师哥师姐不吝赐教。
;现将近期笔记整理发表如下。
;根据我这两天的复习体会,我觉得在从头复习CAD命令之前,有些基础知识是应该需要我记住或了解的。
;一、是最重要的一个技巧,那就是如何破解命令,让命令变成command语句?
;这里我拿破解阵列array为例:
;array命令,一般我们使用时,只是AR一下,然后就会跳出一个窗口,然后数据一次性填完。
;可是,我们怎么用command表示它的每一步执行呢?如何破解呢?
;很明显,我们需要指定对象,我们按完AR命令后会出现【矩形阵列(R)】【环形阵列(P)】,
;这样我们就最起码知道两个代码"R"或"P",事先还需要指定一个对象(我们假定它是首先就指定对象),
;现在我写一个这样的小程序试一试:
;;;(defun c:tt()
;;; (setq obj (car(entsel)))
;;; (command "array" obj "" "p")
;;;)
;我只是为了调试方便,此函数并没有设置返回值,包括下面的回帖,都是这样处理的。
;我加载一下。嘿!可以加载!没提示出错。
;我到CAD界面试一下。自己设置的快捷键tt。
;;;命令: tt
;;;选择对象: array
;;;选择对象: 找到 1 个
;;;选择对象: 输入阵列类型 [矩形(R)/环形(P)] <P>: p
;;;指定阵列的中心点或 [基点(B)]: nil
;;;指定阵列的中心点或 [基点(B)]:
;;;输入阵列中项目的数目: 6 指定填充角度 (+=逆时针,-=顺时针) <360>: 360
;;;是否旋转阵列中的对象?[是(Y)/否(N)] <Y>: y
;哈!按照一步步提示,我执行出来了!
;就这样,试的遍数多些,array就完全“破解”出来了!
;【2013年8月10日编辑、增加】
;事实上,只运行 (command "array")就可以实现一步步按照提示执行下去。上面的方法笨了。
;二、是选择对象的基本方法
;这一点有个很简单的方法获得。
;;;命令: e ERASE
;;;选择对象: ?
;;;*无效选择*
;;;需要点或 窗口(W)/上一个(L)/窗交(C)/框(BOX)/全部(ALL)/栏选(F)/圈围(WP)/圈交(CP)/编组(G)/添加(A)/删除(R)
;;;/多个(M)/前一个(P)/放弃(U)/自动(AU)/单个(SI)/子对象/对象
;三、是特殊位置点捕捉:
;临时追踪点 TT
;两点之间的中点 M2P
;捕捉自 FRO
;端点 ENDP
;中点 MID
;圆心 CEN
;节点 NOD
;象限点 QUA
;交点 INT
;延伸 EXT
;插入点 INS
;垂足 PER
;切点 TAN
;最近点 NEA
;外观交点 APP ;三维视图
;平行 PAR
;无 NON
;对象捕捉设置 OSNAP
好帖子顶起来 本帖最后由 yeahyeah 于 2013-8-9 19:50 编辑
;-----------------------------------------------------------------------
;直线
;;;(defun c:tt ()
;;;(setq pa (getpoint "\n请指定第一点:"))
;;;(setq pb (getpoint "\n请指定第二点:"))
;第一种:
;;;(command "LINE" 坐标 坐标......"")
;;;(command "LINE" pa pb"")
;第二种:
;;;(command "LINE" "tan" 坐标 "tan" 坐标 ......."")
;;;(command "LINE" "tan" pa "tan" pb "")
;第三种:
;;;(command "LINE" 坐标 "tan" 坐标 ......."")
;;;(command "LINE" pa "tan" pb "")
;第四种:
;;;(command "LINE" "tan" 坐标 坐标 ......."")
;;;(command"LINE" "tan" pa pb "")
;第五种:
;;;(command "LINE" "m2p" 坐标 坐标 坐标 "")
;;;(setq pc (getpoint "\n请指定第三点:"))
;;;(command "LINE" "m2p" pa pb pc "")
;第六种:
;;;(command "LINE" "m2p" 坐标 坐标 "m2p" 坐标 坐标"")
;;;(setq pc (getpoint "\n请指定第三点:"))
;;;(setq pd (getpoint "\n请指定第四点:"))
;;;(command "LINE" "m2p" pa pb "m2p" pc pd"")
;画直线的方法还有很多,到这里,我相信大家都会认同我对捕捉知识的重要性的认识了。
;;;)
本帖最后由 yeahyeah 于 2013-8-9 21:04 编辑
;-----------------------------------------------------------------------
;多义线
;;;(defun c:tt ()
;;; (setq pa (getpoint "\n请指定第一点:"))
;;; (setq pb (getpoint "\n请指定第二点:"))
;第一种:
;;;(command "Pline" 坐标 坐标 ......."")
;;;(command "Pline" pa pb "")
;第二种:
;;;(command "Pline" 坐标 坐标 ......."C")
;;;(setq pc (getpoint "\n请指定第三点:"))
;;;(command "Pline" pa pb pc "C"))
;第三种:
;(command "Pline" "tan" 坐标 "tan" 坐标 "")
;;;(command "Pline" "tan" pa "tan" pb "") ;奇怪,这个怎么不成功呢?为什么只能找到第二个切点?
;第四种:
;;;(command"Pline""tan" 坐标 坐标 ......."")
;;;(command"Pline""tan" pa pb "") ;奇怪,这个怎么不成功呢?
;第五种:
;;;(command"Pline" 坐标 "tan" 坐标......."")
;;;(command"Pline" pa "tan" pb"")
;;;)
本帖最后由 yeahyeah 于 2013-8-9 19:51 编辑
;-----------------------------------------------------------------------
;构造线
;;;(defun c:tt ()
;;; (setq pa (getpoint "\n请指定第一点:"))
;;; (setq pb (getpoint "\n请指定第二点:"))
;第一种:
;;;(command "xline" 坐标 坐标......."")
;;;(command "xline" pa pb "")
;第二种:
;;;(command "xline" "tan" 坐标 "tan" 坐标 ....... "")
;;;(command "xline" "tan" pa "tan" pb "")
;第三种:
;;;(command "xline" "tan" 坐标 坐标 ....... "")
;;;(command "xline" "tan" pa pb "")
;第四种:
;(command "xline" 坐标 "tan" 坐标 ....... "")
;;;(command "xline" pa "tan" pb "")
;;;)
本帖最后由 yeahyeah 于 2013-8-9 21:05 编辑
;-----------------------------------------------------------------------
;射线
;;;(defun c:tt ()
;;; (setq pa (getpoint "\n请指定第一点:"))
;;; (setq pb (getpoint "\n请指定第二点:"))
;第一种:
;;;(command "ray" 坐标 坐标......."")
;;;(command "ray" pa pb "")
;第二种:
;;;(command "ray" "tan" 坐标 "tan" 坐标 ....... "")
;;;(command "ray" "tan" pa "tan" pb "") ;奇怪,这个怎么不成功呢?为什么只能找到第二个切点?
;第三种:
;;;(command "ray" "tan" 坐标 坐标 ....... "")
;;;(command "ray" "tan" pa pb "")
;第四种:
;(command "ray" 坐标 "tan" 坐标 ....... "")
;;;(command "ray" pa "tan" pb "")
;;;)
;-----------------------------------------------------------------------
;多边形
;;;(defun c:tt ()
;;; (setq a (getint "\n请指定边数目:"))
;;; (setq pa (getpoint "\n请指定中心点:"))
;;; (setq l (getdist "\n请指定半径长度:"))
;;第一种:内接圆
;(command "polygon" 边数目 中心点 "i" 半径) ;"i"是内接于圆
;;;(command "polygon" a pa "i" l)
;;第二种:外切圆
;(command "polygon" 边数目 中心点 "c" 半径) ;"c"是外切于圆
;;;(command "polygon" a pa "c" l)
;;第三种:边长
;(command "polygon" 边数目 "e" 第一个端点 第二个端点) ;"e"是边
;;; (setq a (getint "\n请指定边数目:"))
;;; (setq pa (getpoint "\n请指定边的第一个端点:"))
;;; (setq pb (getpoint "\n请指定边的第二个端点:"))
;;; (command "polygon" a "e" pa pb)
;;;) 本帖最后由 yeahyeah 于 2013-8-9 20:01 编辑
;-----------------------------------------------------------------------
;矩形
;;;(defun c:tt ()
;第一种:
;(command "rectang" 第一个角点 第二个角点)
;;; (setq pa (getpoint "\n请指定第一个角点:"))
;;; (setq pb (getpoint "\n请指定第二个角点:"))
;;; (command "rectang" pa pb)
;指定第一点或[倒角(C)/标高(E)/圆角(F)/厚度(T)/宽度(W)]:
;指定另一个角点或 [面积(A)/尺寸(D)/旋转(R)]:
;第二种:倒角
;(command "rectang" "C" 倒角距离 倒角距离 第一个角点 第二个角点)
;;; (setq la (getdist "\n指定矩形的第一个倒角距离(纵向):"))
;;; (setq lb (getdist "\n指定矩形的第二个倒角距离(横向):"))
;;; (setq pa (getpoint "\n指定第一个角点:"))
;;; (setq pb (getpoint "\n指定另一个角点:"))
;;; (command "rectang" "C" la lb pa pb)
;第三种:圆角
;(command "rectang" "F" 圆角半径 第一个角点 第二个角点)
;;; (setq la (getdist "\n指定矩形的圆角半径:"))
;;; (setq pa (getpoint "\n指定第一个角点:"))
;;; (setq pb (getpoint "\n指定另一个角点:"))
;;; (command "rectang" "F" la pa pb)
;第四种:线宽
;(command "rectang" "W" 线宽 第一个角点 第二个角点)
;;; (setq la (getdist "\n指定矩形的线宽:"))
;;; (setq pa (getpoint "\n指定第一个角点:"))
;;; (setq pb (getpoint "\n指定另一个角点:"))
;;; (command "rectang" "W" la pa pb)
;;;)
本帖最后由 yeahyeah 于 2013-8-9 21:06 编辑
;-----------------------------------------------------------------------
;圆弧
;;;(defun c:tt ()
;;第一种:三点画弧,三点均在圆上
;(command "ARC" 圆弧起点 圆弧的第二个点 圆弧端点)
;;; (setq pa (getpoint "\n请指定圆弧起点:"))
;;; (setq pb (getpoint "\n请指定圆弧的第二个点:"))
;;; (setq pc (getpoint "\n请指定圆弧端点:"))
;;; (command "ARC" pa pb pc)
;;第二种:三点画弧,一点圆心,两点在圆上 ;怎么画锐角弧,钝角弧?
;(command "ARC" 圆弧起点 "C" 圆心点 圆弧端点) ;圆心(C)
;;; (setq pa (getpoint "\n请指定圆弧起点:"))
;;; (setq pb (getpoint "\n请指定圆心点:")) ;点pa、pb确定了圆的半径
;;; (setq pc (getpoint "\n请指定圆弧端点:"));此点可不必准确,最后确定的圆弧端点是经过此点与圆心的直线和圆的交点
;;; (command "ARC" pa "C" pb pc)
;;第三种:三点画弧,一点圆心,两点在圆上 ;怎么画锐角弧,钝角弧?
;(command "ARC" "C" 圆心点 圆弧起点 圆弧端点)
;;; (setq pa (getpoint "\n请指定圆心点:"))
;;; (setq pb (getpoint "\n请指定圆弧起点:"));点pa、pb确定了圆的半径
;;; (setq pc (getpoint "\n请指定圆弧端点:"))
;;; (command "ARC" "C" pa pb pc)
;第四种:
;(command "ARC" 圆弧起点 "C" 圆心点 "A" 角度) ;圆心(C)/端点(E)
;;; (setq pa (getpoint "\n请指定圆弧起点:"))
;;; (setq pb (getpoint "\n请指定圆心点:")) ;点pa、pb确定了圆的半径
;;; (setq a (* (getangle "\n请指定角度:") (/ 180 pi)));弧度转化为角度
;;; (command "ARC" pa "C" pb "A" a)
;第五种:
;(command "ARC" "C" 圆心点 圆弧起点 "A" 角度)
;;; (setq pa (getpoint "\n请指定圆心点:"))
;;; (setq pb (getpoint "\n请指定圆弧起点:")) ;点pa、pb确定了圆的半径
;;; (setq a (* (getangle "\n请指定角度:") (/ 180 pi)));弧度转化为角度
;;; (command "ARC" "C" pa pb "A" a)
;第六种:
;(command "ARC" 圆弧起点 "C" 圆心点 "L" 弦长) ;注意:非弧长
;;; (setq pa (getpoint "\n请指定圆弧起点:"))
;;; (setq pb (getpoint "\n请指定圆心点:")) ;点pa、pb确定了圆的半径
;;; (setq l (getdist "\n请指定弦长:")) ;弧度转化为角度
;;; (command "ARC" pa "C" pb "L" l)
;第七种:
;(command "ARC" "C" 圆心点 圆弧起点 "L" 弦长);注意:非弧长
;;; (setq pa (getpoint "\n请指定圆心点:"))
;;; (setq pb (getpoint "\n请指定圆弧起点:")) ;点pa、pb确定了圆的半径
;;; (setq l (getdist "\n请指定弦长:")) ;弧度转化为角度
;;; (command "ARC" "C" pa pb "L" l)
;;;)
本帖最后由 yeahyeah 于 2013-8-9 20:02 编辑
;-----------------------------------------------------------------------
;圆
;;;(defun c:tt ()
;;第一种:三点画圆,三点均在圆上
;(command "circle" "3P" 坐标 坐标 坐标)
;;; (setq pa (getpoint "\n指定圆上的第一个点:"))
;;; (setq pb (getpoint "\n指定圆上的第二个点:"))
;;; (setq pc (getpoint "\n指定圆上的第三个点:"))
;;; (command "circle" "3P" pa pb pc)
;;第二种:三点画圆,三点均在圆上 ;三点均与其他图元对象相切
;(command "circle" "3P" "tan" 坐标 "tan" 坐标 "tan" 坐标)
;;; (setq pa (getpoint "\n指定相切的第一个点:"))
;;; (setq pb (getpoint "\n指定相切的第二个点:"))
;;; (setq pc (getpoint "\n指定相切的第三个点:"))
;;; (command "circle" "3P" "tan" pa "tan" pb "tan" pc)
;第三种:直径两端点
;(command "circle" "2P" 坐标 坐标)
;;; (setq pa (getpoint "\n指定圆直径的第一个端点:"))
;;; (setq pb (getpoint "\n指定圆直径的第二个端点:"))
;;; (command "circle" "2P" pa pb)
;第四种:圆心加半径
;(command "circle" 圆心 半径)
;;; (setq pa (getpoint "\n指定圆的圆心:"))
;;; (setq r (getdist "\n指定圆的半径:")) ;注意半径,可为两点,也可为一数字
;;; (command "circle" pa r)
;第五种:圆心加直径
;(command "circle" 圆心 "D" 直径)
;;; (setq pa (getpoint "\n指定圆的圆心:"))
;;; (setq d (getdist "\n指定圆的直径:")) ;注意直径,可为两点,也可为一数字
;;; (command "circle" pa "D" d)
;第六种:两切点,一半径
;(command "circle" "T" 切点 切点 半径)
;;; (setq ta (getpoint "\n指定对象与圆的第一个切点:"))
;;; (setq tb (getpoint "\n指定对象与圆的第二个切点:"))
;;; (setq r (getdist "\n指定圆的半径:")) ;注意半径,可为两点,也可为一数字
;;; (command "circle" "T" ta tb r)
;;;) 本帖最后由 yeahyeah 于 2013-8-9 21:07 编辑
;-----------------------------------------------------------------------
;椭圆及椭圆弧
;;;(defun c:tt()
;第一种:
;(command "ellipse" 轴端点坐标 轴端点坐标 另一条半轴长度)
;;; (setq pa (getpoint "\n指定椭圆的轴端点:"))
;;; (setq pb (getpoint "\n指定轴的另一个端点:"));pa、pb确定了一个轴
;;; (setq l (getdist "\n指定另一条半轴长度:")) ;可为两点,也为数字
;;; (command "ellipse" pa pb l)
;;;(command "ellipse" pa pb "450")
;第二种:
;(command "ellipse" 轴端点坐标 轴端点坐标 "r" 角度) ;旋转(R);这个旋转角度是什么意思??
;;; (setq pa (getpoint "\n指定椭圆的轴端点:"))
;;; (setq pb (getpoint "\n指定轴的另一个端点:"));pa、pb确定了一个轴
;;; (setq a (* (getangle "\n指定绕长轴旋转的角度:") (/ 180 pi))) ;可为两点,也为数字?????????
;;; (command "ellipse" pa pb "r" a)
;第三种:
;(command "ellipse" "A" 轴端点 轴端点 另一条半轴长度 起始角度 终止角度) ;[圆弧(A)/中心点(C)]
;;; (setq pa (getpoint "\n指定椭圆弧的轴端点:"))
;;; (setq pb (getpoint "\n指定轴的另一个端点:"));pa、pb确定了一个轴
;;; (setq l (getdist "\n指定另一条半轴长度:"))
;;; (setq aa (* (getangle "\n指定起始角度:") (/ 180 pi)))
;;; (setq ab (* (getangle "\n指定终止角度:") (/ 180 pi))) ;怎么判断起始角度、终止角度????
;;; (command "ellipse" "A" pa pb l aa ab)
;;;(command "ellipse" "A"(getpoint) (getpoint) 450 45 135) ;数字指定
;第四种:
;(command "ellipse" "A" 椭圆弧的轴端点坐标 轴的另一个端点坐标 "r" 绕长轴旋转的角度 起始角度 终止角度) ;旋转(R)
;;; (setq pa (getpoint "\n指定椭圆弧的轴端点:"))
;;; (setq pb (getpoint "\n指定轴的另一个端点:"));pa、pb确定了一个轴
;;; (setq a (* (getangle "\n指定绕长轴旋转的角度:") (/ 180 pi)))
;;; (setq aa (* (getangle "\n指定起始角度:") (/ 180 pi)))
;;; (setq ab (* (getangle "\n指定终止角度:") (/ 180 pi))) ;怎么判断绕长轴旋转的角度、起始角度、终止角度????
;;; (command "ellipse" "A" pa pb "r" a aa ab)
;第五种:
;(command "ellipse" "c" 椭圆的中心点坐标 轴的端点坐标 另一条半轴长度) ;中心点(C)
;;; (setq o (getpoint "\n指定椭圆的中心点:"))
;;; (setq pa (getpoint "\n指定轴的端点:"))
;;; (setq l (getdist "\n指定另一条半轴长度:"))
;;; (command "ellipse" "c" o pa l)
;;;)