明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10066|回复: 6

[求助]错误: 参数类型错误: fixnump: nil 怎么修改?

[复制链接]
发表于 2010-7-29 12:36:00 | 显示全部楼层 |阅读模式
加载后出现这种错误怎么修改?错在哪里?
如下:

错误: 参数类型错误: fixnump: nil   

  1. ;;;说明
  2. ;(alert "提醒:
  3. ;      \n请首先设置好输精度<小数点位数>,在绘图的过程中可随时用命令JD设置精度。
  4. ;       \n命令"+ - * /"分别代表对所选择的数字求和差积商。
  5. ;       \n其中"- /" 则是以你第一个选到的数字文本为被减数和被除数。
  6. ;       \n命令".."(点点)代表对所选择的数字文本统一加减乘除某个数,默认为1。
  7. ;       \n命令"TJ"代表对所选择的数字文本进行数学统计。
  8. ;       \n所有生成的新文本均与第一个选到的数字文本的样式相同(除角度外)。"
  9. ;)
  10. ;;;定义了一个全局变量为精度
  11. (defun C:JD (/ )
  12. ;;(prompt "\n请输入精度,直接回车则为系统精度:")
  13.   (initget 4)
  14.   (if (setq PRECISION (getint))
  15.      (princ)
  16.      (setq PRECISION (getvar "LUPREC"))
  17.   )
  18. )
  19. ;;(C:JD)  
  20. ;;;加
  21. (defun C:AW (/ key sel ins first numlst result)
  22.   (while (common1)
  23.     (setq result (apply '+ (cadr numlst)))
  24.     (common2)         
  25.   )
  26.   (princ)
  27. )
  28. ;;;减
  29. (defun C:AD (/ key sel ins first numlst result)
  30.   (while (common1)
  31.     (setq result (apply '- (cadr numlst)))
  32.     (common2)         
  33.   )
  34.   (princ)
  35. )
  36. ;;;乘
  37. (defun C:AE (/ key sel ins first numlst result)
  38.   (while (common1)
  39.     (setq result (apply '* (cadr numlst)))
  40.     (common2)         
  41.   )
  42.   (princ)
  43. )
  44. ;;;除
  45. (defun C:AR (/ key sel ins first numlst result)
  46.   (while (common1)
  47.     (setq result (apply '/ (cadr numlst)))
  48.     (common2)         
  49.   )
  50.   (princ)
  51. )
  52. ;;;所有数字都加减乘除某个数
  53. (defun C:AF (/ key op sel ins first numlst result)
  54.   (while (setq sel (ssget '((0 . "TEXT,MTEXT"))))
  55.     (setq first  (ssname sel 0))
  56.     (setq Numlst (sel->list sel))
  57.     (initget 1 "+ - * /")
  58.     (setq key (getkword "\n请输入加减乘除符号<+ - * />:"))
  59.     (initget 2)
  60.     (if (null (setq op (getreal "\n请输入操作数<默认为1>:")))
  61.       (setq op 1.0)
  62.     )        
  63.     (all-cal numlst key op)         
  64.   )
  65.   (princ)
  66. )
  67. ;;;
  68. (defun all-cal (result sym op / lst old new)
  69.   (foreach n (car numlst)
  70.     (setq lst (entget n))
  71.     (setq old (atof (cdr (assoc 1 lst))))
  72.     (setq new (eval (cons (read sym) (list old op))))
  73.     (setq new (cons 1 (rtos new (getvar "LUNITS") PRECISION)))
  74.     (setq lst (subst new (assoc 1 lst) lst))
  75.     (entmod lst)
  76.   )
  77. )
  78. ;;;选择和插入点
  79. (defun common1 ()
  80.   (and
  81.     (setq sel (ssget '((0 . "TEXT,MTEXT"))))
  82.     (null (initget 0 "Yes No"))
  83.     (if (setq key (getkword "\n是否保留原数字Yes,No?<默认不保留>:"))
  84.       (setq key "Yes")
  85.       (setq key "No")
  86.     )  
  87.     (setq first  (ssname sel 0))
  88.     (setq Numlst (sel->list sel))
  89.   )
  90. )
  91. ;;;做文字或者更新文字
  92. (defun common2 ()
  93.   (setq        result (rtos result (getvar "LUNITS") PRECISION))  
  94.   (if (= key "No")
  95.     (if (setq ins (getpoint "\n请输入插入点:"))
  96.       (make-text first result ins)
  97.     )
  98.     (update-text first result)
  99.   )
  100. )
  101. ;;;选择集合转化成数字列表
  102. (defun sel->list (sel / i ent lst num Els nls)
  103.   (setq i 0)
  104.   (repeat (sslength sel)
  105.     (setq ent (ssname sel i))
  106.     (setq lst (entget ent))
  107.     (setq num (atof (cdr (assoc 1 lst))))
  108.     (setq Els (cons ent Els))
  109.     (setq Nls (cons num Nls))
  110.     (setq i (1+ i))
  111.   )
  112.   (list
  113.     (reverse Els)
  114.     (reverse Nls)
  115.   )
  116. )  
  117. ;;;创建新文字,在指定点插入(源程序)
  118. ;(defun make-text (first string inspt / remove txtlst lst)
  119. ;  (setq remove (list -1 330 5 1 10 11 50))
  120. ;  (setq txtlst (entget first))
  121. ;  (foreach n txtlst
  122. ;    (if (not (member (car n) remove))
  123. ;      (setq lst (cons n lst))
  124. ;    )
  125. ;  )  
  126. ;  (setq lst (cons (cons 1 string) lst))
  127. ;  (setq lst (cons (cons 10 inspt) lst))
  128. ;  (setq lst (cons (cons 11 inspt) lst))
  129. ;  (setq lst (reverse lst))
  130. ;  (cdr (assoc 40 (entmake lst)))
  131. ;)
  132. ;注意看一下Mtext的组码 11
  133. ;11
  134. ;X 轴方向矢量(在 WCS 中)
  135. ;DXF:X 值;APP:三维矢量
  136. ;将作为 DXF 输入传递的组码 50(以弧度为单位的旋转角)转换为相等的方向矢量(如果同时传递代码 50 和代码 11、21、31,则;对最后一个代码进行转换)。这是从文字对象转换的一种简便方法。
  137. ;Text的组码 11
  138. ;11
  139. ;第二对齐点(在 OCS 中)(可选)
  140. ;DXF:X 值;APP:三维点
  141. ;只有当 72 或 73 组的值非零时,该值才有意义(如果对正不是基线对正/左对正)
  142. ;程序中 make-text 函数始终传递inspt到10 与11 组码段 当是Mtext的时候就与Text有变化
  143. (defun make-text (first string inspt / remove txtlst lst)
  144.   (setq remove (list -1 330 5 1 10 11 50))
  145.   (setq txtlst (entget first))
  146.   (foreach n txtlst
  147.     (if (not (member (car n) remove))
  148.       (setq lst (cons n lst))
  149.     )
  150.   )
  151.   (if (= (cdr (assoc 0 lst)) "MTEXT")
  152.     (setq lst (subst (cons 41 (* (strlen string) 3)) (assoc 41 lst) lst))
  153.     );_重新计算多行文本的宽度
  154.   (setq lst (cons (cons 1 string) lst))
  155.   (setq lst (cons (cons 10 inspt) lst))
  156. ; (setq lst (cons (cons 11 inspt) lst))
  157.   (setq lst (reverse lst))
  158.   (cdr (assoc 40 (entmake lst)))
  159. )
  160. ;;;保留文字,仅更新内容
  161. (defun update-text (ent string / txtlst)
  162.   (setq txtlst (entget ent))
  163.   (setq txtlst (subst (cons 1 string) (assoc 1 txtlst) txtlst))
  164.   (entmod txtlst)
  165. )
  166. ;;;统计数字文本
  167. (defun C:tj (/ un sel ins tollst numlst first data len ang HIG j n m)
  168.   (setq un (getvar "LUNITS"))
  169.   (while (and (setq sel (ssget '((0 . "TEXT,MTEXT"))))
  170.               (setq ins (getpoint "\n请输入插入点:")))
  171.     (princ "\n统计正在进行......")
  172.     (setq tollst (sel->list sel))
  173.     (setq numlst (cadr tollst))
  174.     (setq first  (caar tollst))
  175.     (setq data   (STAT numlst))
  176.     (setq len (strcat (caar data) (itoa (cdar data))))
  177.     (setq HIG (* (make-text first len ins) 1.5))
  178.     (setq ang (* Pi -0.5))
  179.     (setq j 1)
  180.     (repeat 4
  181.       (setq n (nth j data))
  182.       (setq m (strcat (car n) (rtos (cdr n) un PRECISION)))
  183.       (make-text first m (polar ins ang (* j HIG)))
  184.       (setq j (1+ j))
  185.     )
  186.     (princ "\n统计已经完成!")
  187.   )
  188.   (princ)
  189. )
  190. ;;;统计函数
  191. (defun STAT (numlst / len sum ave var sqr std)
  192.   (setq len (length numlst))                        ;样本数目
  193.   (setq sum (apply '+ numlst))                      ;和
  194.   (setq ave (/ sum len))                            ;均值
  195.   (setq var (mapcar '(lambda (x) (* (- x ave) (- x ave))) numlst))
  196.                                                     ;差平方
  197.   (setq sqr (/ (apply '+ var) len))                 ;方差  variance
  198.   (setq std (sqrt sqr))                             ;标准差
  199.   (list
  200.     (cons "样本数......" len)
  201.     (cons "总和........" sum)
  202.     (cons "平均值......" ave)
  203.     (cons "方差........" sqr)
  204.     (cons "标准差......" std)
  205.   )
  206. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2010-7-29 12:40:00 | 显示全部楼层

请gufeng楼主再帮我看一下,make-text (first string inspt / remove txtlst lst)这个函数是你帮给我修改的,

估计可能是他的问题!

 

 楼主| 发表于 2010-7-29 23:54:00 | 显示全部楼层

各位大虾帮我分析一下原因啊!

发表于 2010-7-30 09:58:00 | 显示全部楼层

你把“+,-,*,/ ”函数名都改了当然不行了。

 楼主| 发表于 2010-7-30 16:05:00 | 显示全部楼层
  1. ;;;加
  2. (defun C:+ (/ key sel ins first numlst result)
  3.   (while (common1)
  4.     (setq result (apply '+ (cadr numlst)))
  5.     (common2)         
  6.   )
  7.   (princ)
  8. )
ZZXXQQ版主是说把  "AW"   这个改回  "+"  来?我改掉是因为这个加号不好输入,应该没关系吧?
 楼主| 发表于 2010-7-30 16:37:00 | 显示全部楼层

ZZXXQQ版主我这个本来是正常的,可以计算的,就是一段时间后不正常了,重新弄一步一步改,先加上

(while (setq sel (ssget '((0 . "TEXT,MTEXT")))) 增加了不过滤多行文本(有三个地方)后;再更改了一下

make-text (first string inspt / remove txtlst lst) 函数,1楼程序注释里有这个的源程序;然后把 "+"   这个改成  "AW"  等,又运行正常了!就是不久又出问题,CAD2004版本。

 

发表于 2010-7-31 12:00:00 | 显示全部楼层

要不就把all-cal函数改成:

(defun all-cal (result sym op / lst old new)
  (foreach n (car numlst)
    (setq lst (entget n))
    (setq old (atof (cdr (assoc 1 lst))))
    (setq sym
     (cond
      ((= sym "+") "C:AW")
      ((= sym "-") "C:AD")
      ((= sym "*") "C:AE")
      (T "C:AR")
     )
    )
    (setq new (eval (cons (read sym) (list old op))))
    (setq new (cons 1 (rtos new (getvar "LUNITS") PRECISION)))
    (setq lst (subst new (assoc 1 lst) lst))
    (entmod lst)
  )
)

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 08:21 , Processed in 0.188067 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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