lisp吧 关注:2,673贴子:12,836
  • 2回复贴,共1
为什么我选了圆之后只有第一次输入C或I是有效的,后面输入都是无效输入,而且第一次返回的结果并不会给圆内切或外切


1楼2021-08-05 14:53回复
    (defun c:7test3a()
    ;以下 pa、ww、hh、n值
    (setq n(getint"请求输入正多边形边数,N="))
    (setq en(entsel"\n选取想作内切或外切正多边形的圆:"))
    (initget "C c I i")
    (setq side (strcase side))
    (setq I 0)
    (setq C 0)
    (while en ;当en存在时,执行以下循环内容,直到en不存在为止
    (setq en_data(entget(car en)))
    (setq en_type(cdr(assoc 0 en_data)))
    (if(= en_type"CIRCLE")
    (progn
    (setq cenpt(cdr(assoc 10 en_data)))
    (setq rad (cdr(assoc 40 en_data)))
    (setq side (getkword "内接I或外切C:"))
    (cond ((= side I )(Command"polygon" n cenpt"I"rad)(setq I (1+ I)))
    ((= side C )(Command"polygon" n cenpt"C"rad)(setq C (1+ C)))
    )
    )
    (alert"该对象并不是圆,请重新选取圆")
    ) ;end if
    (setq en (entsel "\n选择下一个想作为内切正多边形的圆:"))
    )
    (princ(strcat"\n共绘制了"(itoa i)"圆内切和"(itoa c)"外切正多边形"))
    (prin1)
    )
    (prompt"\n<<7TEST3a>>连续对多个圆绘制内切或外切正多边形")
    (prin1)


    2楼2021-08-05 14:55
    回复
      2026-04-15 07:37:06
      广告
      不感兴趣
      开通SVIP免广告
      (1) initget 要移到 while 里面,每次 getkword 前都要设定一次才行。
      (2) cond 里面的两个判断式里的 I 和 C 要用双引号括住,因为是字符不是变数。
      (3) (setq side (strcase side)) 这一行不需要,可以删除。


      来自Android客户端3楼2021-08-07 21:30
      回复