明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13614|回复: 52

[基础] 新人最爱command

  [复制链接]
发表于 2013-8-9 19:27:48 | 显示全部楼层 |阅读模式
本帖最后由 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


评分

参与人数 2明经币 +1 金钱 +5 收起 理由
GamIng + 5 赞一个!
yaokui25 + 1 谢谢楼主这么好的帖子

查看全部评分

发表于 2018-10-6 08:37:45 | 显示全部楼层
好帖子  顶起来
 楼主| 发表于 2013-8-9 19:28:33 | 显示全部楼层
本帖最后由 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"")

;画直线的方法还有很多,到这里,我相信大家都会认同我对捕捉知识的重要性的认识了。

;;;)

 楼主| 发表于 2013-8-9 19:29:05 | 显示全部楼层
本帖最后由 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"")
  
;;;)
 楼主| 发表于 2013-8-9 19:29:39 | 显示全部楼层
本帖最后由 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 "")

;;;)

 楼主| 发表于 2013-8-9 19:31:28 | 显示全部楼层
本帖最后由 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 "")

;;;)

 楼主| 发表于 2013-8-9 19:36:28 | 显示全部楼层
;-----------------------------------------------------------------------
;多边形

;;;(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)

;;;)
 楼主| 发表于 2013-8-9 19:37:40 | 显示全部楼层
本帖最后由 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)
  
;;;)


 楼主| 发表于 2013-8-9 19:38:45 | 显示全部楼层
本帖最后由 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)


;;;)


 楼主| 发表于 2013-8-9 19:39:46 | 显示全部楼层
本帖最后由 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)
  
;;;)
 楼主| 发表于 2013-8-9 20:42:39 | 显示全部楼层
本帖最后由 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)
  
;;;)


您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-23 21:43 , Processed in 0.211524 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表