明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1739|回复: 7

请问这简单的程序哪里错了(help)等着交作业呢.........

[复制链接]
发表于 2003-9-18 09:06:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2003-9-18 9:41:10 编辑

;已知输入圆心位置,绘一个圆和他的外切三角形
;2003年9月17日
(defun c:rect03( / pt1 Dia d l1 l2  pt2 pt3 pt4 )
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setq pt1 (getpoint "请输入圆心坐标(0,0):"))
  (setq Dia (getreal "请输入直径D(10):"))
  (setq d (/ Dia 2))
  (setq l1 (/ d (sin 30)))
  (setq l2 (* (cos 30) l1))
  (setq pt2 (list (- (car pt1) l2) (- (cadr pt1) d)))
  (setq pt3 (list (car pt1) (+ (cadr pt1) l1)))
  (setq pt4 (list (+ (car pt1) l2) (- (cadr pt1) d)))
  (command "circle" pt1 d "")
  (command "pline" pt2 pt3 pt4 "c")
  (setvar "cmdecho" 1)
  (setvar "blipmode" 1)
  (prin1))
发表于 2003-9-18 09:20:00 | 显示全部楼层
角度是弧度制的,应该为(/ pi 6),还有,circle命令最后不用空回车了
 楼主| 发表于 2003-9-18 09:33:00 | 显示全部楼层
改成这样后圆和三角形没相切,,,是怎么回事....谢谢了
;已知输入圆心位置,绘一个圆和他的外切三角形
;2003年9月17日
(defun c:rect03( / pt1 Dia d l1 l2  pt2 pt3 pt4 )
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setq pt1 (getpoint "请输入圆心坐标(0,0):"))
  (setq Dia (getreal "请输入直径D(10):"))
  (setq d (/ Dia 2))
  (setq l1 (/ d (sin (/ pi 6))))
  (setq l2 (* (cos (/ pi 12)) l1))
  (setq pt2 (list (- (car pt1) l2) (- (cadr pt1) d)))
  (setq pt3 (list (car pt1) (+ (cadr pt1) l1)))
  (setq pt4 (list (+ (car pt1) l2) (- (cadr pt1) d)))
  (command "circle" pt1 d "")
  (command "pline" pt2 pt3 pt4 "c")
  (setvar "cmdecho" 1)
  (setvar "blipmode" 1)
  (prin1))
发表于 2003-9-18 09:47:00 | 显示全部楼层
你原来写的sin和cos都是30度,为何改后就一个变成30度,一个变成15度?
还有circle命令,最后的空回车去掉
  1. (defun c:rect03( / pt1 Dia d l1 l2  pt2 pt3 pt4 )
  2.   (setvar "cmdecho" 0)
  3.   (setvar "blipmode" 0)
  4.   (setq pt1 (getpoint "请输入圆心坐标(0,0):"))
  5.   (setq Dia (getreal "请输入直径D(10):"))
  6.   (setq d (/ Dia 2))
  7.   (setq l1 (/ d (sin (/ pi 6))))
  8.   (setq l2 (* (cos (/ pi 6)) l1))
  9.   (setq pt2 (list (- (car pt1) l2) (- (cadr pt1) d)))
  10.   (setq pt3 (list (car pt1) (+ (cadr pt1) l1)))
  11.   (setq pt4 (list (+ (car pt1) l2) (- (cadr pt1) d)))
  12.   (command "circle" pt1 d)
  13.   (command "pline" pt2 pt3 pt4 "c")
  14.   (setvar "cmdecho" 1)
  15.   (setvar "blipmode" 1)
  16.   (prin1))
发表于 2003-9-18 10:02:00 | 显示全部楼层
;;更完善一点
(defun c:rect03( / cmd bli pt1 Dia d l1 l2 pt2 pt3 pt4 )
  (command "_.undo" "_be")
  (setq cmd (getvar "cmdecho") bli (getvar "blipmode"))
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setq pt1 (if (setq pt1 (getpoint "请输入圆心坐标:<0,0>")) pt1 '(0 0)))
  (setq Dia (if (setq Dia (getreal "请输入直径D:<10>")) Dia 10.0))
  (setq d (/ Dia 2))
  (setq l1 (/ d (sin (/ pi 6))))
  (setq l2 (* (cos (/ pi 6)) l1))
  (setq pt2 (list (- (car pt1) l2) (- (cadr pt1) d)))
  (setq pt3 (list (car pt1) (+ (cadr pt1) l1)))
  (setq pt4 (list (+ (car pt1) l2) (- (cadr pt1) d)))
  (command "circle" pt1 d)
  (command "pline" pt2 pt3 pt4 "c")
  (setvar "cmdecho" cmd)
  (setvar "blipmode" bli)
  (command "_.undo" "_e")
  (princ)
)
 楼主| 发表于 2003-9-18 13:40:00 | 显示全部楼层
谢谢版主和lyy
能不能解释一下下面这些语句是什么意思呢?我是刚刚学Autolisp看不懂
(command "_.undo" "_be")
(setq cmd (getvar "cmdecho") bli (getvar "blipmode"))

(command "_.undo" "_e")
发表于 2003-9-18 14:05:00 | 显示全部楼层
两个标签是设置undo标签的,第一个开始,后面的是结束。
这样你在使用undo是就是将这两个标签间所做的事情取消。
中间的那个代码是取出两个系统变量,因为你在程序里要修改它们,所以得先把他们的原始值保存起来,以便程序最后恢复这些系统变量。
注意,恢复系统变量不能用你原来的方法,因为你并不知道原来它们就是1
发表于 2003-9-26 15:25:00 | 显示全部楼层
(defun C:RECT03        (/ CMD BLI PT1 RAD)
  (setq        CMD (getvar "cmdecho")
        BLI (getvar "blipmode")
  )
  (setvar "cmdecho" 0)
  (command "_.undo" "_be")
  (setvar "blipmode" 0)
  (if (null (setq PT1 (getpoint "\n请输入圆心坐标<0,0,0>: ")))
    (setq PT1 '(0 0 0))
  )
  (if (null (setq RAD (getdist PT1 "\n请输入半径<10>: ")))
    (setq RAD 10.0)
  )
  (command "_.CIRCLE" PT1 RAD)
  (command "_.POLYGON" 3 PT1 "C" RAD)
  (setvar "blipmode" BLI)
  (command "_.undo" "_e")
  (setvar "cmdecho" CMD)
  (princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 16:17 , Processed in 0.204714 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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