lisp 程序:等腰三角形 :在autocad2012中加载有时错误,有时能出现一条底边
;画出一个等腰三角形P1,P2,P3,三角形的底边(P1,P2)与正X轴之间有一个夹角B。;该程序还应提示用户输入起点P1,L1的长度及角A和角B(defundtr(a)...
;画出一个等腰三角形P1,P2,P3,三角形的底边(P1,P2)与正X轴之间有一个夹角B。;该程序还应提示用户输入起点P1,L1的长度及角A和角B
(defun dtr(a)
(* a (/ pi 180.0))
)
(defun c:dy(/ p1 a b L1 L2 p2 p3 p4)
(setvar "cmdecho" 0)(graphscr)
(setq L1 (getdist "\n请指定等腰三角形底边长度:"))
(setq b (getangle "\n请指定等腰三角形底角度:"))
(setq a (getangle "\n请指定等腰三角形底边旋转角度:"))
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L2 (/ L1 2 (cos (b)))) ;计算腰长
(setq p2 (polar p1 (dtr (a)) L1)) ;底边另一点
(setq p3 (polar p1 (dtr (+ b a)) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
) 展开
(defun dtr(a)
(* a (/ pi 180.0))
)
(defun c:dy(/ p1 a b L1 L2 p2 p3 p4)
(setvar "cmdecho" 0)(graphscr)
(setq L1 (getdist "\n请指定等腰三角形底边长度:"))
(setq b (getangle "\n请指定等腰三角形底角度:"))
(setq a (getangle "\n请指定等腰三角形底边旋转角度:"))
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L2 (/ L1 2 (cos (b)))) ;计算腰长
(setq p2 (polar p1 (dtr (a)) L1)) ;底边另一点
(setq p3 (polar p1 (dtr (+ b a)) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
) 展开
2个回答
展开全部
(defun c:dy (/ p1 a b L1 L2 p2 p3)
(setvar "cmdecho" 0)
(graphscr)
(setq L1 (getdist "\n请指定等腰三角形底边长度:"))
(setq b (getangle "\n请指定等腰三角形底角度:"));用户输入角度,以弧度返回该角度
(setq a (getangle "\n请指定等腰三角形底边旋转角度:"));用户输入角度,以弧度返回该角度
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L2 (/ L1 2 (cos b))) ;计算腰长
(setq p2 (polar p1 a L1)) ;底边另一点
(setq p3 (polar p1 (+ b a) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
)
你套用一个子函数是多余的 也是错误的
getangle
暂停以等待用户输入角度,然后以弧度形式返回该角度
(getangle [pt] [msg])
参数
pt
当前 UCS 中的二维基点。
如果指定了 pt 参数,用户可以再指定一个点来给 AutoLISP
输入一个角度。也可以提供三维基点,但角度的度量都是在当前构造平面上进行的。
msg
显示给用户的提示信息。
返回值
用户指定的角度(弧度)。
getangle 函数以逆时针方向测量零弧度方向(由系统变量 ANGBASE
设置)和用户指定的两点确定的直线之间的角度。所返回的角度以弧度表示,是相对于当前构造平面(当前标高处的当前 UCS 的 XY 平面)来测量的。
示例
下面的样例代码说明如何使用不同的参数来调用 getangle:
命令: (setq ang (getangle))
命令: (setq ang (getangle '(1.0
3.5)))
命令: (setq ang (getangle "指定方向:
"))
命令: (setq ang (getangle '(1.0 3.5)
"指定方向: "))
使用说明
用户可以通过输入一个以 AutoCAD
的当前角度单位格式表示的数来指定角度。虽然当前角度单位格式可能是度、百分度或其他单位,但本函数总是以弧度为单位返回角度值。用户也可以通过在图形屏幕上指定两个点来指定角度。AutoCAD
从第一个点到当前十字光标画一条拖引线,以帮助用户确定角度。
理解输入角度与 getangle 函数返回的角度之间的区别是非常重要的。传送给 getangle 函数的角度是根据系统变量
ANGDIR 和 ANGBASE 的当前设置确定的。然而,一旦输入了一个角度,它就以 ANGBASE 的当前设置为零弧度,按逆时针方向来测量,而忽略
ANGDIR 的设置。
用户不能输入另一个 AutoLISP 表达式来响应 getangle 函数的请求。
(setvar "cmdecho" 0)
(graphscr)
(setq L1 (getdist "\n请指定等腰三角形底边长度:"))
(setq b (getangle "\n请指定等腰三角形底角度:"));用户输入角度,以弧度返回该角度
(setq a (getangle "\n请指定等腰三角形底边旋转角度:"));用户输入角度,以弧度返回该角度
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L2 (/ L1 2 (cos b))) ;计算腰长
(setq p2 (polar p1 a L1)) ;底边另一点
(setq p3 (polar p1 (+ b a) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
)
你套用一个子函数是多余的 也是错误的
getangle
暂停以等待用户输入角度,然后以弧度形式返回该角度
(getangle [pt] [msg])
参数
pt
当前 UCS 中的二维基点。
如果指定了 pt 参数,用户可以再指定一个点来给 AutoLISP
输入一个角度。也可以提供三维基点,但角度的度量都是在当前构造平面上进行的。
msg
显示给用户的提示信息。
返回值
用户指定的角度(弧度)。
getangle 函数以逆时针方向测量零弧度方向(由系统变量 ANGBASE
设置)和用户指定的两点确定的直线之间的角度。所返回的角度以弧度表示,是相对于当前构造平面(当前标高处的当前 UCS 的 XY 平面)来测量的。
示例
下面的样例代码说明如何使用不同的参数来调用 getangle:
命令: (setq ang (getangle))
命令: (setq ang (getangle '(1.0
3.5)))
命令: (setq ang (getangle "指定方向:
"))
命令: (setq ang (getangle '(1.0 3.5)
"指定方向: "))
使用说明
用户可以通过输入一个以 AutoCAD
的当前角度单位格式表示的数来指定角度。虽然当前角度单位格式可能是度、百分度或其他单位,但本函数总是以弧度为单位返回角度值。用户也可以通过在图形屏幕上指定两个点来指定角度。AutoCAD
从第一个点到当前十字光标画一条拖引线,以帮助用户确定角度。
理解输入角度与 getangle 函数返回的角度之间的区别是非常重要的。传送给 getangle 函数的角度是根据系统变量
ANGDIR 和 ANGBASE 的当前设置确定的。然而,一旦输入了一个角度,它就以 ANGBASE 的当前设置为零弧度,按逆时针方向来测量,而忽略
ANGDIR 的设置。
用户不能输入另一个 AutoLISP 表达式来响应 getangle 函数的请求。
展开全部
我把你的程序改了一下,你试试看。
(defun c:dy(/ p1 a b L1 L2 p2 p3 p4)
(setvar "cmdecho" 0)(graphscr)
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L1 (getdist p1 "\n请指定等腰三角形底边长度:"))
(setq b (getangle p1 "\n请指定等腰三角形底角度:"))
(setq a (getangle p1 "\n请指定等腰三角形底边旋转角度:"))
(setq L2 (/ L1 2 (cos b))) ;计算腰长
(setq p2 (polar p1 a L1)) ;底边另一点
(setq p3 (polar p1 (+ b a) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
)
(defun c:dy(/ p1 a b L1 L2 p2 p3 p4)
(setvar "cmdecho" 0)(graphscr)
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L1 (getdist p1 "\n请指定等腰三角形底边长度:"))
(setq b (getangle p1 "\n请指定等腰三角形底角度:"))
(setq a (getangle p1 "\n请指定等腰三角形底边旋转角度:"))
(setq L2 (/ L1 2 (cos b))) ;计算腰长
(setq p2 (polar p1 a L1)) ;底边另一点
(setq p3 (polar p1 (+ b a) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询