丶冫氵灬氵冫丶 发表于 2014-4-12 11:00:53

请教一个Autolisp加载出现的问题

我编写了一个lisp程序,把选中区域图形中的矩形用一个已有的块替换(本人是做工程的,想把工程桩用一个块替换),代码如下:
(defun C:RtoB(/ in_block ask ss1 pt11 ss1_length pt_data ent1 ent1_data type_info i pt_num )
        (setvar "cmdecho" 0)
        (setq in_block (entsel "\n选择被插入的块:"));*
        (initget 1 "Yes No")
        (setq ask (getkword "\n替换后删除原矩形?(Yes or No):"));*
        (print '选择替换区域:)
        (setq ss1 (ssget "C" (setq pt11 (getpoint)) (getcorner pt11)))
        (setq ss1_length (1- (sslength ss1)))
        (while (>= ss1_length 0)
                (setq pt_data (append))
                (setq ent1 (ssname ss1 ss1_length))
                (setq ent1_data (entget ent1))
                (setq type_info (assoc 0 ent1_data))
                (if (wcmatch (cdr type_info) "LWPOLYLINE")
                        (progn
                                (foreach i ent1_data
                                        (if(= (car i) 10)
                                                (setq pt_data (append pt_data (list (cdr i))))
                                        )
                                )
                                (setq pt_num (cdr(assoc 90 ent1_data)))
                                (cond        ((or (= pt_num 4) (= pt_num 5))
                                                        (setq in_point (inters (nth 0 pt_data) (nth 2 pt_data) (nth 1 pt_data) (nth 3 pt_data)))
                                                        (entmake (list (cons 0 "insert") (cons 2 (cdr(assoc 2 (entget (car in_block))))) (list 10 (car in_point) (cadr in_point))))
                                                        (if (= ask "Yes") (entdel ent1))
                                                )
                                                ((= pt_num 6)
                                                        (setq in_point (inters (nth 1 pt_data) (nth 3 pt_data) (nth 2 pt_data) (nth 4 pt_data)))
                                                        (entmake (list (cons 0 "insert") (cons 2 (cdr(assoc 2 (entget (car in_block))))) (list 10 (car in_point) (cadr in_point))))
                                                        (if (= ask "Yes") (entdel ent1))
                                                )
                                )
                               
                        )
                )
                (setq ss1_length (1- ss1_length))
        )
        (setvar "cmdecho" 1)
        (princ)
)
以上的代码直接复制到命令行里执行是没问题,但如果通过加载方式 运行的话,load后就要求响应上面打*号处的句子,而且“选择被插入的块”和“替换后删除原矩形?(Yes or No):”这两句话在命令提示行都成了乱码,这里强调一下,是加载的时候,不是输入命令rtob时,有哪位知道怎么回事吗,指教一下,感激不尽。


lsjj 发表于 2014-4-12 11:11:54

沒異狀啊(補字)

丶冫氵灬氵冫丶 发表于 2014-4-12 11:17:30

我刚在自己的电脑上appload后,出现 错误: 参数类型错误: numberp: nil,这又怎么回事,这问题困惑了我两个星期了

丶冫氵灬氵冫丶 发表于 2014-4-12 11:19:20

本帖最后由 丶冫氵灬氵冫丶 于 2014-4-12 11:21 编辑

lsjj 发表于 2014-4-12 11:11 static/image/common/back.gif
沒異狀啊(補字)
我刚在自己的电脑上appload后,出现 错误: 参数类型错误: numberp: nil,这又怎么回事,这问题困惑了我两个星期了,在公司的时候,就出现前面说过的问题,按理说在load后不应该响应代码里的输入输出语句才对呀

kwok 发表于 2014-4-12 11:44:50

cad2008试一下,没有你说的情况.

ll_j 发表于 2014-4-12 11:47:31

丶冫氵灬氵冫丶 发表于 2014-4-12 11:19 static/image/common/back.gif
我刚在自己的电脑上appload后,出现 错误: 参数类型错误: numberp: nil,这又怎么回事,这问题困惑了我两 ...

我不检查你的程序了。出现这种错误还有一个可能性就是电脑中了CAD病毒。参见http://bbs.mjtd.com/thread-100858-1-1.html

丶冫氵灬氵冫丶 发表于 2014-4-12 12:15:37

ll_j 发表于 2014-4-12 11:47 static/image/common/back.gif
我不检查你的程序了。出现这种错误还有一个可能性就是电脑中了CAD病毒。参见http://bbs.mjtd.com/thread- ...

你是load加载的吗

Andyhon 发表于 2014-4-12 13:45:39

...通过加载方式...
这么说就是一个文件喽
请将该文件 打包 上传供检测...

丶冫氵灬氵冫丶 发表于 2014-4-12 19:50:57

Andyhon 发表于 2014-4-12 13:45 static/image/common/back.gif
...通过加载方式...
这么说就是一个文件喽
请将该文件 打包 上传供检测...

这就是一般的lisp源代码文件

Andyhon 发表于 2014-4-12 21:15:51

Command: (load "V:/Rtob")
C:RTOB

Command: rtob

选择被插入的块:
替换后删除原矩形?(Yes or No):y

选择替换区域:
==============
ok,未见异常
页: [1] 2
查看完整版本: 请教一个Autolisp加载出现的问题