明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 呆呆

[LISP]求救 谢谢呵呵!

  [复制链接]
发表于 2003-12-2 11:02:00 | 显示全部楼层
;;能用repeat的就不要用while
(defun c:cc(/ i ss en p1 p2 p3 p4 ang)
  (setq i -1)
  (if (setq ss (ssget '((0 . "text") (72 . 0))))
    (repeat (sslength ss)
      (setq en (entget (ssname ss (setq i (1+ i))))
            p1 (car (textbox en))
            p2 (cadr (textbox en))
            p3 (polar p1 (angle p1 p2) (/ (distance p1 p2) 2))
            p4 (cdr (assoc 10 en))
            ang (cdr (assoc 50 en))
            p3 (mapcar '+ (polar '(0 0 0) (+ (angle '(0 0 0) p3) ang) (distance '(0 0 0) p3)) p4)
      )
      (setq en (subst (cons 11 p3) (assoc 11 en) en))
      (setq en (subst (cons 72 4) (assoc 72 en) en))
      (entmod en)
    )
  )
  (princ)
)
 楼主| 发表于 2003-12-2 13:57:00 | 显示全部楼层
谢谢lyy的帮助 我对函数“mapcar”的用法还是不理解
 楼主| 发表于 2003-12-3 13:41:00 | 显示全部楼层
请问在什么情况下用函数mapcar
发表于 2003-12-3 13:53:00 | 显示全部楼层
要对表里的元素进行单独处理,并且还返回这个表时。。
如果要对'(10 11 12)都加1就这样
(mapcar '1+ '(10 11 12))
返回
(11 12 13)
...
 楼主| 发表于 2003-12-3 14:49:00 | 显示全部楼层
请问飞哥 我的程序的错误在哪里?
(defun c:ae()
  (setq m(getreal "\n请输入保留的小数位数:"))
  (prompt "\n选择所要改变的数字:")
  (setq ss(ssget ' ((0 . "text"))))
  (setq i 0)
  (repeat (sslength ss)
    (setq s1 (entget (ssname ss i))
          nr (assoc 1 s1)
          nr_1(cdr nr)
          nr_2(atof nr_2)
          nr_3(rtos nr_3  2  m)
     )
    (setq s1 (subst (cons 1 nr_3) nr s1))
    (entmod)
    (setq i (1+ i))
   )
)
 楼主| 发表于 2003-12-3 15:06:00 | 显示全部楼层
我怎么不能发帖子了 我不知道为什么  我只好把问题回复到这里了
我现在有两个问题 一个上面的  另外一个是下面的
 楼主| 发表于 2003-12-3 15:06:00 | 显示全部楼层
请问飞哥我的程序怎么改变才能循环使用
(defun o_set()
     (setvar "cmdecho" 1)
     (command "offset" pause pause pause "")
     (setq e1 (entlast))
)
(defun c:op(/ oce ofe ode e1 )
      (setq ode (getvar "osmode"))
      (setq oce (getvar "cmdecho"))
      (setq ofe (getvar "clayer"))
      (setvar "osmode" 0)
      (o_set)
      (setvar "cmdecho" 0)
      (command "change" e1 "" "p" "la" ofe "")
      (setvar "cmdecho" oce)
      (setvar "osmode" ode)
      (prin1)
)
发表于 2003-12-3 15:25:00 | 显示全部楼层
先回答第一个:
有几个问题:
1、rtos 后面的两个参数是整型,所以你的m必须是整形,你用getreal就不行了,用getint
2、注意系统变量dimzin的影响,可能导致后续的0无法显示需要的位数。
3、程序中给nr_2和nr_3赋值的时候有问题,自己看看,这是粗心的错误。。。

  1. (defun c:ae ()
  2.   (setq m (getint "\n请输入保留的小数位数:"))
  3.   (setq dim (getvar "dimzin"))
  4.   (setvar "dimzin" 0)
  5.   (prompt "\n选择所要改变的数字:")
  6.   (setq ss (ssget '((0 . "text"))))
  7.   (setq i 0)
  8.   (repeat (sslength ss)
  9.     (setq s1   (entget (ssname ss i))
  10.           nr   (assoc 1 s1)
  11.           nr_1 (cdr nr)
  12.           nr_2 (atof nr_1)
  13.           nr_3 (rtos nr_2 2 m)
  14.     )
  15.     (setq s1 (subst (cons 1 nr_3) nr s1))
  16.     (entmod s1)
  17.     (setq i (1+ i))
  18.   )
  19.   (setvar "dimzin" dim)
  20.   (princ)
  21. )
 楼主| 发表于 2003-12-3 15:29:00 | 显示全部楼层
谢谢飞哥的指教 非常感谢!!我以后回小心的!
发表于 2003-12-3 15:40:00 | 显示全部楼层
第二个问题如果循环容易,但要退出就比较麻烦,用取消就相当于出错退出,除非offect中的PAUSE都用参数代替,至少第一个PAUSE用参数代替,就比较好办

  1. (defun o_set ()
  2.   (setvar "cmdecho" 1)
  3.   (initget "q")
  4.   (setq        dist (getreal (strcat "输入偏移距离[(Q)退出]<"
  5.                               (rtos (getvar "offsetdist"))
  6.                               ">:"
  7.                       )
  8.              )
  9.   )
  10.   (if (not dist)
  11.     (setq dist (getvar "offsetdist"))
  12.   )
  13.   (if (/= "q" dist)
  14.     (progn
  15.       (command "offset" dist pause pause "")
  16.       (setq e1 (entlast))
  17.       (setvar "cmdecho" 0)
  18.       (command "change" e1 "" "p" "la" ofe "")
  19.     )
  20.     (setq m nil)
  21.   )
  22. )
  23. (defun c:op (/ oce ofe ode e1)
  24.   (setq ode (getvar "osmode"))
  25.   (setq oce (getvar "cmdecho"))
  26.   (setq ofe (getvar "clayer"))
  27.   (setvar "osmode" 0)
  28.   (setq m t)
  29.   (while m
  30.     (o_set)
  31.   )
  32.   (setvar "cmdecho" oce)
  33.   (setvar "osmode" ode)
  34.   (prin1)
  35. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 08:23 , Processed in 0.166241 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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