求源程序及程序每一步骤的详细解释 有过程分析更好
cad visual lisp语言编程问题
答案:2 悬赏:10 手机版
解决时间 2021-02-28 17:09
- 提问者网友:ミ烙印ゝ
- 2021-02-27 18:22
最佳答案
- 五星知识达人网友:十鸦
- 2021-02-27 18:56
(defun C:HZTY ( / #os1 @cd1 @cd2 @p1 @p2 @p3 ang1 ang2 ang3 ang4 cd gd jd p1 p2 p3 p4)
(setq #os1 (getvar "osmode"));取得捕捉设置
(if (setq p1 (getpoint "\n请指定基点"));如果没有指定就结束
(progn
(if (setq CD (getdist p1 "\n请指定长度"));如果没有输入就结束
(progn
(if (setq GD (getdist p1 "\n请指定高度"));如果没有输入就结束动作
(progn
(if (setq JD (getreal "\n请指定角度"));如果没有输入就结束
(progn;如果有输入,那么
(setvar "osmode" 0);捕捉设置为0
(setq ang1 (angtof (rtos JD 2 5));角度转换为角度弧
ang2 (+ ang1 1.570796);垂直角度弧
p2 (polar p1 ang1 CD);计算点位置
p3 (polar p2 ang2 GD)
p4 (polar p1 ang2 GD);计算第4点位置
@p1 p1;设置数值
@p2 p2
@p3 p3
ang3 ang1
ang4 ang2
@CD1 CD
@CD2 GD;方便下面计算的时候调整数值
)
(command "PLINE" p1 p2 p3 p4 "C");绘制长方形
(if (> GD CD);如果输入的高度大于长度
(progn
(setq @p1 p2 @p2 p3 @p3 p4 ang3 (+ ang1 1.570796) ang4 (+ ang2 1.570796) @CD1 GD @CD2 CD);点的位置及角度进行调整
)
)
(setq p1 (polar @p1 ang4 (* @CD2 0.5));定位点
p2 (polar @p2 ang4 (* @CD2 0.5))
p3 (polar @p3 ang3 (* @CD1 -0.5));计算椭圆3点
)
(command "_ellipse" p1 p2 p3);绘制椭圆
(setq p1 (polar @p1 ang3 (* @CD1 0.5))
p2 (polar p1 ang4 (* @CD2 0.5))
p4 (polar p2 ang3 (* @CD2 -0.5))
p2 (polar p2 ang3 (* @CD2 0.5));计算正方形4点
)
(command "PLINE" p1 p2 p3 p4 "C");绘制正方形
(setvar "osmode" #os1);捕捉设置还原
)
)
)
)
)
)
)
)
(prin1)
);复制到记事本,以【.lsp】为后缀命名,命令【HZTY】,加载autoLISP就可以使用
;程序不是很完美但是可以绘制你要的图形
(setq #os1 (getvar "osmode"));取得捕捉设置
(if (setq p1 (getpoint "\n请指定基点"));如果没有指定就结束
(progn
(if (setq CD (getdist p1 "\n请指定长度"));如果没有输入就结束
(progn
(if (setq GD (getdist p1 "\n请指定高度"));如果没有输入就结束动作
(progn
(if (setq JD (getreal "\n请指定角度"));如果没有输入就结束
(progn;如果有输入,那么
(setvar "osmode" 0);捕捉设置为0
(setq ang1 (angtof (rtos JD 2 5));角度转换为角度弧
ang2 (+ ang1 1.570796);垂直角度弧
p2 (polar p1 ang1 CD);计算点位置
p3 (polar p2 ang2 GD)
p4 (polar p1 ang2 GD);计算第4点位置
@p1 p1;设置数值
@p2 p2
@p3 p3
ang3 ang1
ang4 ang2
@CD1 CD
@CD2 GD;方便下面计算的时候调整数值
)
(command "PLINE" p1 p2 p3 p4 "C");绘制长方形
(if (> GD CD);如果输入的高度大于长度
(progn
(setq @p1 p2 @p2 p3 @p3 p4 ang3 (+ ang1 1.570796) ang4 (+ ang2 1.570796) @CD1 GD @CD2 CD);点的位置及角度进行调整
)
)
(setq p1 (polar @p1 ang4 (* @CD2 0.5));定位点
p2 (polar @p2 ang4 (* @CD2 0.5))
p3 (polar @p3 ang3 (* @CD1 -0.5));计算椭圆3点
)
(command "_ellipse" p1 p2 p3);绘制椭圆
(setq p1 (polar @p1 ang3 (* @CD1 0.5))
p2 (polar p1 ang4 (* @CD2 0.5))
p4 (polar p2 ang3 (* @CD2 -0.5))
p2 (polar p2 ang3 (* @CD2 0.5));计算正方形4点
)
(command "PLINE" p1 p2 p3 p4 "C");绘制正方形
(setvar "osmode" #os1);捕捉设置还原
)
)
)
)
)
)
)
)
(prin1)
);复制到记事本,以【.lsp】为后缀命名,命令【HZTY】,加载autoLISP就可以使用
;程序不是很完美但是可以绘制你要的图形
全部回答
- 1楼网友:低音帝王
- 2021-02-27 20:00
(princ "\n加载成功!启动快捷键 ccc")
;;;加载active x功能
(vl-load-com)
;;;定义模型空间指针
(setq mspace
(vla-get-modelspace
(vla-get-activedocument (vlax-get-acad-object))
)
)
;;;度->弧度函数
(defun detorad (numberofdegrees)
(* pi (/ numberofdegrees 180.0))
)
;;;主程序
(defun c:ccc (/ pt1 pt2 len deg deg1 deg2 key)
;;;获取基点,第二个角点(或边长,角度,设置默认值)
(setq pt1 (getpoint "\n点取或输入一个角点:"))
(initget "b b")
(setq pt2 (getpoint pt1 "\n点取或输入第二个角点或指定边长(b):")
)
(if (= pt2 "b")
(progn
(setq len (getdist "\n点取或输入边长(默认为1000):"))
(if (not len)
(setq len 1000)
)
)
)
(if len
(setq deg (getint "\n输入图形与水平轴的夹角(默认为0):"))
)
(if (not deg)
(setq deg 0)
)
(if (and pt2 (/= pt2 "b"))
(setq len (distance pt1 pt2)
deg (angle pt1 pt2)
)
)
;;;获取绘图方向,逆时针/顺时针
(initget "+ -")
(setq
key (getpoint
"\n选取方向参考点或输入“+”(逆时针),“-”(顺时针)(默认逆时针):"
)
)
(if (and key (and (/= key "+") (/= key "-")))
(progn
(setq deg1 (angle pt1 key )
deg2 (angle pt1 pt2)
deg1 (- deg1 deg2)
)
(cond ((<= deg1 pi) (setq key "+"))
((> deg1 pi) (setq key "-"))
)
)
)
(if (not key) (setq key "+"))
(draw pt1 len deg key)
(princ)
)
;;;画线子程序
(defun draw (pt1 len deg key / rr deg2 ptn num)
;;;计算半径,首次偏移距离
(setq rr (/ len (+ 8 (* (sqrt 3) 2)))
l1 (* (/ rr (sqrt 3)) 2)
pt pt1
num 5
)
(cond ((= key "+") (setq deg2 (+ deg (detorad 60))))
((= key "-") (setq deg2 (- deg (detorad 60))))
)
(command "pline")
;;;画三角形
(repeat 3
(progn
(command pt)
(setq pt (polar pt deg len))
(cond ((= key "+")(setq deg (+ deg (detorad 120)) ))
((= key "-")(setq deg (- deg (detorad 120)) ))
)
)
)
(command "c")
;;; 画圆形
(setq pt1 (polar (polar pt1 deg l1) deg2 l1))
(repeat 5
(progn
(setq pt pt1)
(repeat num
(progn
(vla-addcircle mspace (vlax-3d-point pt) rr)
(setq pt (polar pt deg2 (* rr 2)))
)
)
(setq pt1 (polar pt1 deg (* rr 2))
num (1- num))
)
)
)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯