CAD设计论坛

 找回密码
 立即注册
论坛新手常用操作帮助系统等待验证的用户请看获取社区币方法的说明新注册会员必读(必修)
查看: 14860|回复: 28

[开发] [原创]圆内加五角星lsp代码,详细有注解

[复制链接]
发表于 2006-11-10 09:07 | 显示全部楼层 |阅读模式
(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)9 D8 R0 }1 |7 X$ K. \
  (setq oce (getvar "cmdecho"))      ;命令行回显状态% s, \0 R2 H9 {! g3 {/ @/ l2 z9 o
  (setvar "cmdecho" 0)               ;命令行不回显& x3 T4 {% t2 T5 b  y
  (setq os (getvar "osmode"))        ;捕捉方式
) o3 B7 ^& g# {  (setvar "osmode" 0)                ; 取消捕捉,如果不取消,图形会显示不正确
. o  V; P& n1 b  _2 O  (setq angb (getvar  "angbase" ))   ;取角度起始方向
5 R9 L/ e* @3 f  (setq angd (getvar  "angdir" ))    ;取角度旋转方向
0 T4 V! g# t" z: Q7 C5 i* \* K  (setvar "angbase" 0.0)             ;x轴(东)为0
" f- |" R0 r( ~" f  (setvar "angdir" 0)                ;逆时针为正
& u5 n9 V+ f: ]  K; Z) D  (setq en (entsel "\n选取内部生成五角星的圆:"))( g! y/ r9 ?0 d' w- E6 M6 [) ^
  (setq I 0)                         ;记数器
9 ]6 q9 }* |+ E7 ^0 y9 z  (while en1 t3 h' c( S1 a; h* c& m: e) u5 q+ T8 A
    (setq en_data (entget (car en)))             ;选对象/ R3 M1 J& s6 i" F& x9 Y+ U; E
    (setq en_type (cdr (assoc 0 en_data)))       ;群码0为参数类别9 ^' L& H$ W7 U6 N+ t( ]$ ?
    (if (= en_type "CIRCLE")                     ;如为圆
' T) a3 ?4 H+ V        (progn
( I) m8 N/ k1 d, W7 T$ e' A% r   (setq cenpt (cdr (assoc 10 en_data)))   ;取得中心点
/ O  Q+ o3 o& G0 h   (setq rad (cdr (assoc 40 en_data)))     ;取得半径: e" h' \6 d1 ]( c) h) g9 Y
          (setq o1 (polar cenpt (/ pi 2) rad))    ;外部五个点8 A' _8 ~3 ]& _1 ]/ H8 H1 i; z. G
   (setq o2 (polar cenpt (/ (* 18 pi) 180) rad))  U4 f3 z2 H* R$ y$ G7 e( O
   (setq o3 (polar cenpt (/ (* -54 pi) 180) rad))- d5 T5 s1 o6 o
   (setq o4 (polar cenpt (/ (* -126 pi) 180) rad))7 _% K% ?1 t+ r. s
   (setq o5 (polar cenpt (/ (* 162 pi) 180) rad))2 `4 _1 n% ?. ^, r3 U) o) n$ t, U, Z
   
2 V2 q/ R2 e9 p$ F4 p   4 R3 h/ j" f; D* b
   (setq rad1 (* rad (- (sin (/ (* 54 pi) 180))    ;内部五个点距离圆心距离为rad1; k2 h4 T2 e9 D. I6 e
          (* (cos (/ (* 54 pi) 180))0 S9 C9 l, K. A& ?8 e; a
      (/ (sin (/ (* 36 pi) 180))   ;这行及下行只是求36度正切值
, W: R( y4 W) T0 U3 y5 _% K         (cos (/ (* 36 pi) 180))
0 j9 D4 R+ p7 a; U* X$ T3 _      ): @7 c+ c, c8 J$ h" [
    ): a6 V+ D# F7 x( J5 O
     ( |; b: P' b/ x5 `/ o
       )
' I, g( R6 _1 e, H5 J2 P3 i% e        )% Q+ i- v- k1 }! a+ }6 h
   )                                        ;rad赋值完毕
2 K$ a# f2 Q% e6 B( p0 g1 U   (setq i1 (polar cenpt (/ (* 54 pi) 180) rad1))        ;内部五个点
2 z* `2 E$ ?- l5 o  K: \  J: Y   (setq i2 (polar cenpt (/ (* -18 pi) 180) rad1))" L5 X3 O# ?1 Y# ^; R3 j
   (setq i3 (polar cenpt (/  pi -2) rad1))! d( A% l! J, X/ v
   (setq i4 (polar cenpt (/ (* -162 pi) 180) rad1))0 `9 t+ ]2 \! Q8 f: J3 S
   (setq i5 (polar cenpt (/ (* 126 pi) 180) rad1))
# ~5 u: _3 o5 m$ l   ;五角形外形,用pline使之成为整体, S7 @* b: S$ d9 P% b  v5 l
   (command "pline" o1 "w" 0 0 i1 o2 i2 o3 i3 o4 i4 o5 i5  "c")  
" i9 f% U' _' H  M   (command "line" o1 i3 "")             ;五角内部五条直线+ Z$ n* ]' i2 D9 G) O; r' Y( R
   (command "line" o2 i4 "" )
( c. x8 N0 N: v& m% Y6 X- D5 e- Q/ s   (command "line" o3 i5 "")% P! d& k  o3 x% c: p0 E/ X
   (command "line" o4 i1 "")
6 F# e( q1 {2 t   (command "line" o5 i2 "")5 y7 e$ y7 E" w. ?) N  t3 i: Z" z7 t  J6 N
   (setq I (1+ I))                      ;每完成一个,记数器加16 i: l( h( R- {: J& q2 x6 `7 _
         )
3 N' G3 W0 H5 k* b, K: o: W3 t         (alert "该对象并不是圆,请重新选取圆")  ;非圆时提醒
/ o( h3 J9 @( R; G0 j  T     )                              ;end if
2 N4 h* H8 v3 F/ t     (setq en (entsel "\n 选取下一个内部生成五角星的圆:"))  ;重新选取
! d. t. h# k& m! {  e            
+ R" o3 d. ]' P- S      
! \" ]2 x. E) j. _   )9 }5 T0 r, ~5 R, }! H3 _, ]' G
   (princ (strcat "\n共绘制了"(itoa i) "个圆内接五角星"))( |9 G7 g9 Z- z; X0 k- C
  (setvar "osmode" os)         ;回原捕捉模式
7 Z4 o' L1 F/ P1 t: S' l  (setvar "cmdecho" oce)       ;回命令行回显示状态
' U2 h7 m5 w! b0 D: }& s% w  (setvar "angbase" angb)     ;返回角度初始! K) B. Z9 _; @( S. C% c' f
  (setvar "angdir" angd)        ;返回角度旋转方向3 p& C& O* i4 T. T0 T
  (princ)" Z- G2 i. v! e# n" V6 ~
)
9 d9 e; S+ l, n. E# a' g5 C(prompt "\n<<5js>>连续多个圆内接五角星,by孟宪林:tjmxl@163.com")
& d: l( u, |, u(prin1)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

1

查看全部评分

发表于 2006-11-10 09:16 | 显示全部楼层
不错,帮你顶下。
 楼主| 发表于 2006-11-10 09:35 | 显示全部楼层
非常感谢版主,没想到会得到你的奖励和回复,而且很快.我学lisp时间不长,几个月吧.以前发表过一点小程序,但回复得人很少.这是我昨天一晚上的结果,我的这段代码之所以加了很详细的注释,是因为我以前看过的程序,注解很少,看起来很费力气.所以我选择了详细的注解,为了后来的兄弟看起来方便些.真希望新手高手都能关注我的代码,最好能提些意见,优化一下.这样既是对我的鼓励,又是帮助.' A7 e: H# ^' W8 e1 `' E
    昨天写这段代码(不敢叫做程序,还太简单)时,没有关闭捕捉,运行时一会儿正常,一会儿不正常.搞了很长时间,才知道是捕捉方式引起的,开始还以为我的autocad出错了呢(因为我用MDT调试时没有问题,嘿嘿,刚打开MDT当然还没有选捕捉),找到原因后我兴奋得睡不着觉,前些天没解决的也是这个问题.我想新手可能都会遇到这个问题.9 G1 A3 X) r; z! a3 ^( }

  v1 p$ b3 A6 e& e0 u[ 本帖最后由 ttmc 于 2006-11-10 09:42 编辑 ]
发表于 2006-11-11 15:56 | 显示全部楼层
面对这些字符,我有点头大,都是命令行里的吗?是步骤吧
发表于 2006-11-11 16:50 | 显示全部楼层
再帮你顶下,顺便把命令写上:5js
发表于 2006-11-17 09:22 | 显示全部楼层

从事cad工作几年了,从没想过要用lsp....记得收集里有句台词。。。。“还不是怕麻烦嘛!“
发表于 2006-11-19 20:22 | 显示全部楼层
顶一下。% L! p" w; S6 ]2 G2 S
好样的
发表于 2006-11-22 11:28 | 显示全部楼层
厉害
, h5 `8 T4 _% Z7 |" u顶一下) I; O! @! U. d# ]0 H
在学校也学这个的,不过工作以后就不用啦
6 g6 _2 d, Y0 e6 |9 [ 太麻烦!
发表于 2006-11-25 22:47 | 显示全部楼层
顶楼主,好样的
发表于 2007-1-30 14:16 | 显示全部楼层
不错强人!!!
发表于 2007-8-16 11:17 | 显示全部楼层
兴趣?工作?很好,我只会画,嘿嘿。
发表于 2007-8-26 14:34 | 显示全部楼层
支持楼主发帖,我要学习
发表于 2007-8-28 14:31 | 显示全部楼层
顶一下。, e' i0 f# p- U5 ^
好样的
发表于 2007-9-1 15:56 | 显示全部楼层
我要学习
发表于 2008-2-26 09:37 | 显示全部楼层
谢谢分享,努力学习中
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于|免责|隐私|版权|广告|联系|手机版|CAD设计论坛

GMT+8, 2024-5-7 01:22

CAD设计论坛,为工程师增加动力。

© 2005-2024 askcad.com. All rights reserved.

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