[原创]圆内加五角星lsp代码,详细有注解
(defun c:5js(/ oce os angb angd en I en_data en_type cenpt rad o1 o2 o3 o4 o5 i1 i2 i3 i4 i5 rad1)(setq oce (getvar "cmdecho")) ;命令行回显状态
(setvar "cmdecho" 0) ;命令行不回显
(setq os (getvar "osmode")) ;捕捉方式
(setvar "osmode" 0) ; 取消捕捉,如果不取消,图形会显示不正确
(setq angb (getvar"angbase" )) ;取角度起始方向
(setq angd (getvar"angdir" )) ;取角度旋转方向
(setvar "angbase" 0.0) ;x轴(东)为0
(setvar "angdir" 0) ;逆时针为正
(setq en (entsel "\n选取内部生成五角星的圆:"))
(setq I 0) ;记数器
(while en
(setq en_data (entget (car en))) ;选对象
(setq en_type (cdr (assoc 0 en_data))) ;群码0为参数类别
(if (= en_type "CIRCLE") ;如为圆
(progn
(setq cenpt (cdr (assoc 10 en_data))) ;取得中心点
(setq rad (cdr (assoc 40 en_data))) ;取得半径
(setq o1 (polar cenpt (/ pi 2) rad)) ;外部五个点
(setq o2 (polar cenpt (/ (* 18 pi) 180) rad))
(setq o3 (polar cenpt (/ (* -54 pi) 180) rad))
(setq o4 (polar cenpt (/ (* -126 pi) 180) rad))
(setq o5 (polar cenpt (/ (* 162 pi) 180) rad))
(setq rad1 (* rad (- (sin (/ (* 54 pi) 180)) ;内部五个点距离圆心距离为rad1
(* (cos (/ (* 54 pi) 180))
(/ (sin (/ (* 36 pi) 180)) ;这行及下行只是求36度正切值
(cos (/ (* 36 pi) 180))
)
)
)
)
) ;rad赋值完毕
(setq i1 (polar cenpt (/ (* 54 pi) 180) rad1)) ;内部五个点
(setq i2 (polar cenpt (/ (* -18 pi) 180) rad1))
(setq i3 (polar cenpt (/pi -2) rad1))
(setq i4 (polar cenpt (/ (* -162 pi) 180) rad1))
(setq i5 (polar cenpt (/ (* 126 pi) 180) rad1))
;五角形外形,用pline使之成为整体
(command "pline" o1 "w" 0 0 i1 o2 i2 o3 i3 o4 i4 o5 i5"c")
(command "line" o1 i3 "") ;五角内部五条直线
(command "line" o2 i4 "" )
(command "line" o3 i5 "")
(command "line" o4 i1 "")
(command "line" o5 i2 "")
(setq I (1+ I)) ;每完成一个,记数器加1
)
(alert "该对象并不是圆,请重新选取圆");非圆时提醒
) ;end if
(setq en (entsel "\n 选取下一个内部生成五角星的圆:"));重新选取
)
(princ (strcat "\n共绘制了"(itoa i) "个圆内接五角星"))
(setvar "osmode" os) ;回原捕捉模式
(setvar "cmdecho" oce) ;回命令行回显示状态
(setvar "angbase" angb) ;返回角度初始
(setvar "angdir" angd) ;返回角度旋转方向
(princ)
)
(prompt "\n<<5js>>连续多个圆内接五角星,by孟宪林:[email protected]")
(prin1) 不错,帮你顶下。 非常感谢版主,没想到会得到你的奖励和回复,而且很快.我学lisp时间不长,几个月吧.以前发表过一点小程序,但回复得人很少.这是我昨天一晚上的结果,我的这段代码之所以加了很详细的注释,是因为我以前看过的程序,注解很少,看起来很费力气.所以我选择了详细的注解,为了后来的兄弟看起来方便些.真希望新手高手都能关注我的代码,最好能提些意见,优化一下.这样既是对我的鼓励,又是帮助.
昨天写这段代码(不敢叫做程序,还太简单)时,没有关闭捕捉,运行时一会儿正常,一会儿不正常.搞了很长时间,才知道是捕捉方式引起的,开始还以为我的autocad出错了呢(因为我用MDT调试时没有问题,嘿嘿,刚打开MDT当然还没有选捕捉),找到原因后我兴奋得睡不着觉,前些天没解决的也是这个问题.我想新手可能都会遇到这个问题.
[ 本帖最后由 ttmc 于 2006-11-10 09:42 编辑 ] :L 面对这些字符,我有点头大,都是命令行里的吗?是步骤吧:o 再帮你顶下,顺便把命令写上:5js
倒
从事cad工作几年了,从没想过要用lsp....记得收集里有句台词。。。。“还不是怕麻烦嘛!“ 顶一下。好样的 :) 厉害
顶一下
在学校也学这个的,不过工作以后就不用啦
:L 太麻烦! 顶楼主,好样的 不错强人!!!:victory: 兴趣?工作?很好,我只会画,嘿嘿。 支持楼主发帖,我要学习 顶一下。
好样的 我要学习:( :D :o ;P 谢谢分享,努力学习中:D
页:
[1]
2