明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: yeahyeah

[基础] 新人最爱command

  [复制链接]
 楼主| 发表于 2013-8-9 20:44:59 | 显示全部楼层
;-----------------------------------------------------------------------
;圆环


;;;(defun c:tt()


;第一种:
;(command "DONUT" 圆环的内径 圆环的外径 圆环的中心点 "")
;;;   (setq ra (getdist "\n指定圆环的内径:"))
;;;   (setq rb (getdist "\n圆环的外径:"))
;;;   (setq o (getpoint "\n指定圆环的中心点:"))
;;;   (command "DONUT" ra rb o "")


;;;)


 楼主| 发表于 2013-8-9 20:46:57 | 显示全部楼层
;-----------------------------------------------------------------------
;删除


;;;(defun c:tt()


;第一种:
;(command "erase" 对象 "")
;;;(command "erase" (car(entsel)) "")
;;;(command "erase" (entlast) "")
;;;(command "erase" (getpoint "指定删除对象:") "")


;;;  )


 楼主| 发表于 2013-8-9 20:48:20 | 显示全部楼层
;-----------------------------------------------------------------------
;复制


;;;(defun c:tt()


;第一种:
;(command "copy" 对象 "" 坐标 坐标 "")
  
;;;(setq obj (car(entsel)))       ;此时失去框选、栏选等作用
;或
;;;(setq obj (getpoint "\n指定复制对象:"))    ;指定一对象可用指定一个点代替
  
;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq pb (getpoint "\n指定第二个点:"))     ;第二个点的坐标可以无限写下去,有多少个“第二个点的坐标”就会复制多少个图元
;;;(command "copy" obj "" pa pb"")


;;;)


 楼主| 发表于 2013-8-9 20:49:19 | 显示全部楼层
;-----------------------------------------------------------------------
;镜像


;;;(defun c:tt()


;第一种:
;(command "mirror" 对象 "" 坐标 坐标 "Y")         ;删除源对象(Y)
;例子可参考下面【第二种】


;第二种:
;(command "mirror" 对象 ""坐标 坐标 "N")          ;不删除源对象(N)   ;此处也可写 "" ,默认为不删除源对象


;;;(setq obj (car(entsel)))
;或
;;;(setq obj (getpoint "\n选择对象:"))    ;选择一对象可用指定一个点代替
  
;;;(setq pa (getpoint "\n指定镜像线的第一点:"))
;;;(setq pb (getpoint "\n指定镜像线的第二点:"))
;;;(command "mirror" obj "" pa pb "n")


;;;)


 楼主| 发表于 2013-8-9 20:50:10 | 显示全部楼层
本帖最后由 yeahyeah 于 2013-8-9 21:09 编辑

;-----------------------------------------------------------------------
;偏移


;;;(defun c:tt()


;第一种:
;(command "offset" 偏移距离 要偏移的对象 要偏移的那一侧上的点坐标 "" )           ;不删除源对象


;;;(setq l (getdist "\n指定偏移距离:"))
  
;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要偏移的对象:"))    ;选择一对象可用指定一个点代替
  
;;;(setq pa (getpoint "\n指定要偏移的那一侧上的点:"))
;;;(command "offset" l obj pa "")   ;如果只是偏移一次,需要加"",否则将继续“指定要偏移的对象”“指定要偏移的那一侧上的点”……


;第二种:
;(command "offset" "E" "Y" 偏移距离 对象 坐标 "")     ;删除源对象
;;;;[通过(T)/删除(E)/图层(L)]
;;;;要在偏移后删除源对象吗?[是(Y)/否(N)]
;;;(command "offset" "E" "Y" l obj pa "")


;第三种:
;(command "offset" "T" 要偏移的对象 通过点 "")        ;通过(T)


;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要偏移的对象:"))


;;;(setq pa (getpoint "\n指定通过点:"))
;;;(command "offset" "T" obj pa "")


;第三/四种:
;(command "offset" "L" "C" 偏移距离 要偏移的对象 要偏移的那一侧上的点 "")        ;图层(L) ;当前(C)/源(S)


;;;(setq l (getdist "\n指定偏移距离:"))
  
;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要偏移的对象:"))    ;选择一对象可用指定一个点代替
  
;;;(setq pa (getpoint "\n指定要偏移的那一侧上的点:"))
;;;(command "offset" "L" "C" l obj pa "")               
;;;(command "offset" "L" "S" l obj pa "")                ;这两个我不知道什么意思,当前图层和源图层有什么区别???????


;;;)


 楼主| 发表于 2013-8-9 20:51:14 | 显示全部楼层
本帖最后由 yeahyeah 于 2013-8-9 21:09 编辑

;-----------------------------------------------------------------------
;移动


;;;(defun c:tt()


;第一种:
;(command "move" 对象 "" 基点坐标 第二个点坐标)


;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要移动的对象:"))


;;;(setq pa (getpoint "\n指定基点:"))


;;;(setq pb (getpoint "\n指定第二个点:"))
;;;(setq pb (list 1000 2000 0))       ;指定一点,也可以输入数据   ;点在CAD中用“点表”存储???????
;;;(setq pb '(1000 2000 0))           ;这样也可以


;;;(command "move" obj "" pa pb)


;第二种:
;(command "move" 对象 "" "d" 坐标)   ;用点的形式表示X轴、Y轴、Z轴的相对点位移


;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要移动的对象:"))


;;;(setq pa (getpoint "\n指定基点:"))   ;这种方法在应用时应该不可取或者使用不会广泛
;;;(setq pa (list 1000 2000 0))       ;也可以提前设定数据
;;;(setq pa '(1000 2000 0))           ;这样也可以


;;;(setq x (getreal "\n请输入X轴方向的位移数值:"))
;;;(setq y (getreal "\n请输入X轴方向的位移数值:"))
;;;(setq pa (list x y 0))


;;;(command "move" obj "" "d" pa)


;;;)


 楼主| 发表于 2013-8-9 20:52:12 | 显示全部楼层
;-----------------------------------------------------------------------
;旋转


;;;(defun c:tt()


;第一种:
;(command "rotate" 对象 "" 基点坐标 旋转角度)


;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要旋转的对象:"))


;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq ang (* (getangle "\n指定旋转角度:") (/ 180 pi)))     ;这个地方一定要记着弧度转化为角度


;;;(command "rotate" obj "" pa ang)


;第二种:
;(command "rotate" 对象 "" 基点坐标 "c" 旋转角度)    ;[复制(C):意思是说旋转后,新对象生成,原对象保留


;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要旋转的对象:"))


;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq ang (* (getangle "\n指定旋转角度:") (/ 180 pi)))


;;;(command "rotate" obj "" pa "c" ang)


;第三种:
;(command"rotate"对象""基点坐标"r" 参照角 新角度)     ; 参照(R)]:旋转角度为【新角度-参照角】


;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要旋转的对象:"))


;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq ang1 (* (getangle "\n指定参照角:") (/ 180 pi)))
;;;(setq ang2 (* (getangle "\n指定新角度:") (/ 180 pi)))
  
;;;(command "rotate" obj "" pa "r" ang1 ang2)


;;;)


 楼主| 发表于 2013-8-9 21:46:24 | 显示全部楼层
本帖最后由 yeahyeah 于 2013-8-10 16:33 编辑

;-----------------------------------------------------------------------
;缩放

;缩放的都是图元的长度,比如圆的半径,矩形的边长。

;;;(defun c:tt()

;第一种:
;(command "scale" 对象 "" 基点坐标 比例因子)       ;比例因子好像可以通过长度或对象比较来得到???????????????????

;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要缩放的对象:"))

;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq i (getreal "\n指定比例因子:"))
;;;(command "scale" obj "" pa i)

;第二种:[复制(C)
;(command "scale" 对象 "" 基点坐标 "C" 比例因子)     ;[复制(C):意思是说旋转后,新对象生成,原对象保留
  
;;;(setq obj (car(entsel)))
;;;或
;;;(setq obj (getpoint "\n指定要缩放的对象:"))

;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq i (getreal "\n指定比例因子:"))
;;;(command "scale" obj "" pa "C" i)

;第三种:参照(R)

;比例因子=【新的长度除以参照长度】。
;长度可以是数字,也可用点坐标代替。
;参照长度可用图元本身的,也可以是其他图元的。
;可想而知引出了多少种计算的方法。
  
;第三种(1)
;(command "scale" 对象 "" 基点坐标 "r" 参照长度 新的长度)           ;参照(R)

;;;(setq obj (car(entsel)))
;;;(setq obj (getpoint "\n指定要缩放的对象:"))

;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq la (getdist "\n指定参照长度:"))         ;本身getdist函数就是既可以输入数字,也可以两点指定(取的是数,不是坐标)
;;;(setq lb (getdist "\n指定新的长度:"))

;;;(command "scale" obj "" pa "r" la lb)

;第三种(2):
;(command "scale" 对象 "" 基点坐标 "r" 参照长度第一点坐标 参照长度第二点坐标 新的长度点坐标)

;;;(setq obj (car(entsel)))
;;;(setq obj (getpoint "\n指定要缩放的对象:"))

;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq ra (getpoint "\n指定参照长度第一点:"))
;;;(setq rb (getpoint "\n指定参照长度第二点:"))
;;;(setq la (getpoint "\n指定新的长度点:"))

;;;(command "scale" obj "" pa "r" ra rb la)

;第三种(3):
;(command "scale" 对象 "" 基点坐标 "r" 参照长度第一点坐标 参照长度第二点坐标 新的长度)

;;;(setq obj (car(entsel)))                           ;【缩放注释1】
;;;(setq obj (getpoint "\n指定要缩放的对象:"))        ;【缩放注释2】

;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq ra (getpoint "\n指定参照长度第一点:"))
;;;(setq rb (getpoint "\n指定参照长度第二点:"))
;;;(setq l (getdist "\n指定新的长度:"))

;;;(command "scale" obj "" pa "r" ra rb l)
;若用注释【缩放注释2】指定图元的方法,这个程序执行到这里出现连续错误。选择对象: 找到 0 个。下面的根本无法执行。
;用注释【缩放注释1】没问题。

;;;(command "scale" (getpoint "\n指定要缩放的对象:") "" (getpoint "\n指定基点:") "r" (getpoint "\n指定参照长度第一点:") (getpoint "\n指定参照长度第二点:") (getdist "\n指定新的长度:"))
;这个大长句成功了,由此可以看出LISP程序执行时的调用顺序,在不同的情况下,CAD判定和处理的对象明显不同。

  
;第三种(3):
;(command "scale" 对象 "" 基点坐标 "r" 参照长度第一点坐标 参照长度第二点坐标 新的长度第一点坐标 新的长度第二点坐标)

;;;(setq obj (car(entsel)))
;;;(setq obj (getpoint "\n指定要缩放的对象:"))

;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq ra (getpoint "\n指定参照长度第一点:"))
;;;(setq rb (getpoint "\n指定参照长度第二点:"))
;;;(setq la (getpoint "\n指定新的长度第一点:"))
;;;(setq lb (getpoint "\n指定新的长度第二点:"))

;;;(command "scale" obj "" pa "r" ra rb la lb)

;经过测试,这样的编程是错误的,不能达到设计人预想的【指定新的长度第一点】【指定新的长度第二点】的目的。
;语句检查虽然无错误,但是能利用的点也只是程序中所写的【指定新的长度第一点】。
;且此点不能与【参照长度第一点】重合(因为程序此时判定新的长度为0)。

;为什么这样会失败呢?这就像【缩放第三种(2)】一个道理,在不同的情况下,CAD判定和处理的对象明显不同。
;用getdist,点了两个点,CAD会很清楚这是为判断距离的;可是一旦程序只写两个点的参数,CAD不清楚这两个点是干嘛的,就出错了。


;第三种(4):
;(command "scale" 对象 "" 基点坐标 "r" 参照长度 新的长度第一点坐标 新的长度第二点坐标)

;;;(setq obj (car(entsel)))

;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq ra (getdist "\n指定参照长度"))
;;;(setq la (getpoint "\n指定新的长度第一点:"))
;;;(setq lb (getpoint "\n指定新的长度第二点:"))

;;;(command "scale" obj "" pa "r" ra la lb)

;这个程序没有成功。程序利用的还是【新的长度第一点】。此点和基点的距离构成了新的长度。

;第三种(5):
;(command "scale" 对象 "" 基点坐标 "r" 参照长度点坐标 新的长度点坐标)
  
;;;(setq obj (car(entsel)))

;;;(setq pa (getpoint "\n指定基点:"))
;;;(setq ra (getpoint "\n指定参照长度点:"))
;;;(setq la (getpoint "\n指定新的长度点:"))

;;;(command "scale" obj "" pa "r" ra la)

;这个程序依然没有成功。而且程序没运行完,很明显是缺少参数。
;可见,"r"的两个参数,如果是点坐标,则只能认为是参照长度的第一第二点,别无其他。
  
;;;)


 楼主| 发表于 2013-8-9 21:48:29 | 显示全部楼层
;-----------------------------------------------------------------------
;修剪

;;;(defun c:tt()

;(command "trim" 对象 对象 …… "" 要修剪的对象  要修剪的对象……"")

;能不能把多个【对象】打包,把多个【要修剪的对象】打包???????????这个我还不会。。。
;这可能涉及到图元的筛选。

;;;(setq obj1 (car(entsel)))
;;;(setq obj2 (car(entsel)))
;;;(setq pa (getpoint"请指定基准点:"))
;;;(command "trim" obj1 "" (list obj2 pa)"")

;上面的这个程序是可行的,可是我还不知道为什么要这样写?????????????????

;;;)
 楼主| 发表于 2013-8-9 21:49:35 | 显示全部楼层
;-----------------------------------------------------------------------
;延伸


;;;(defun c:tt()


;(command "_extend" 对象1 ""(list 对象2 延伸方向点)...."")


;;;(setq obj1 (car(entsel "\n指定边界对象:")))
;;;(setq obj2 (car(entsel "\n指定延伸对象")))
;;;(setq p1 (getpoint"\n指定延伸方向点"))
;;;(command "_extend" obj1 "" (list obj2 p1) "")


;上面的这个程序是可行的,可是我还不知道为什么要这样写?????????????????


;;;)


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

本版积分规则

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

GMT+8, 2024-12-24 01:45 , Processed in 0.165738 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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