yeahyeah
发表于 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 "")
;;;)
yeahyeah
发表于 2013-8-9 20:46:57
;-----------------------------------------------------------------------
;删除
;;;(defun c:tt()
;第一种:
;(command "erase" 对象 "")
;;;(command "erase" (car(entsel)) "")
;;;(command "erase" (entlast) "")
;;;(command "erase" (getpoint "指定删除对象:") "")
;;;)
yeahyeah
发表于 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"")
;;;)
yeahyeah
发表于 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")
;;;)
yeahyeah
发表于 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 "") ;这两个我不知道什么意思,当前图层和源图层有什么区别???????
;;;)
yeahyeah
发表于 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)
;;;)
yeahyeah
发表于 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)
;;;)
yeahyeah
发表于 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"的两个参数,如果是点坐标,则只能认为是参照长度的第一第二点,别无其他。
;;;)
yeahyeah
发表于 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)"")
;上面的这个程序是可行的,可是我还不知道为什么要这样写?????????????????
;;;)
yeahyeah
发表于 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) "")
;上面的这个程序是可行的,可是我还不知道为什么要这样写?????????????????
;;;)