hbgsw 发表于 2015-4-13 20:51:18

老是提示程序参数错误,不知道错那里,求组各位大神

本帖最后由 hbgsw 于 2015-4-14 22:38 编辑

如题:
要实现的功能:
根据文件名提取相关信息,插入A3图框块的时候,自动填入图号,名称等等,由于文件名称都比较规则(例如:文件名为FOC558990400 转轴.DWG),所以想自己写个简单实用点的程序实现以上功能,但是LISP编辑器老是报错(提取图号的那段程序),求各位大神帮助。
新手发帖,知道的指点迷津,非常感谢!


(DEFUN C:ffer (/ pt1 pt2 x1 y1 x2 y2 disx disy acx acy pt0 os a3form date0 filename lengtha dwgno pcode pname pchengshi lengthakg )
   (setvar "cmdecho" 0)
   (setq totaldir "C:/Program Files/FlexCAD")
   (setq dwgdir (strcat totaldir "/document/dwg/"))            ;;;设定dwg文件的目录变量
   (setq pt1 (getpoint "\n>>>请选择图形左上角====>>:"))
   (setq pt2 (getcorner pt1 "\n>>>请选择图形右下角====>>:"))
   (setq date0 (menucmd "M=$(edtime,$(getvar,date), yyyy-M-d)"))
   (setq lengtha (strlen (setq filename (getvar "dwgname"))))
   (setq lengtha (- lengtha 4));文件名长度
   (setq dwgno (substr filename 1 lengtha)) ;电子档文件名
   (setq lengthakg (vl-string-position (ascii " ") dwgno));空格的位置
   (if (= lengthakg nil);开始出问题的部位,CAD提示 错误: 参数太多:
   (progn
   (setq pcode dwgno )
   (setq pname dwgno )
   )
            (setq pcode(substr dwgno 1 lengthakg));取图号
            (setq pcode (strcase pcode));转换为大写
            (setq pchengshi (strcat "P" pcode))
            (setq lengthakg (+ 2 lengthakg))
            (setq pname(substr dwgno lengthakg lengtha));取名称
            (setq pname (strcase pname));
   )
   (setq x1 (car pt1));
   (setq y1 (cadr pt1));
   (setq x2 (car pt2));
   (setq y2 (cadr pt2));
   (setq      a3form (strcat dwgdir "A31.dwg"))
   (setq disx (abs (- x1 x2)))
   (setq disy (abs (- y1 y2)))
   (setq acx(/ disx 380.00))
   (setq acy(/ disy 236.00))
   (if (> acy acx)(setq acx acy))
   (if (> x1 x2)(setq x1 x2))
   (if (> y1 y2)(setq y1 y2))
   ;(setq pt0 (list (+ x1 (/ disx 2 ))(+ y1 (/ disy 2 ))(caddr pt1)))
   (setq pt0 (list (- (+ x1 (/ disx 2 ))(* 9.1769 acx))(- (+ y1 (/ disy 2 ))(* 29.286 acy))(caddr pt1)))
   (setq os (getvar "osmode"))
   (setvar "osmode" 1)
   (command "insert"a3form pt0 acx "" "0" "" pname pcode pchengshi"" "" "" date0 "" )
   ;针对目前的倍数创建标注样式。
   (setvar "osmode" os)
    (princ)
)

aihuyujian 发表于 2015-4-14 07:28:28

是不是要把(getvar "dwgname")获取的路径字符串里面的//替换成/然后再处理? 没搞过不知道

hbgsw 发表于 2015-4-14 08:23:49

取的只是文件名,不是路径啊,!

aihuyujian 发表于 2015-4-14 09:41:28

dwgdir 从何而来?

pzweng 发表于 2015-4-14 10:00:28

楼主会调试吗,可以一步一步监视变量值

hbgsw 发表于 2015-4-14 20:26:28

aihuyujian 发表于 2015-4-14 09:41 static/image/common/back.gif
dwgdir 从何而来?

(setq totaldir "C:/Program Files/FlexCAD")
(setq dwgdir (strcat totaldir "/document/dwg/"))            ;;;设定dwg文件的目录变量
在CAD启动的时候 有加载设置目录
所以这里是可以的
但是就是不知道为什么取零件图号和名称的时候老是有问题。

hbgsw 发表于 2015-4-14 20:29:08

本帖最后由 hbgsw 于 2015-4-14 22:40 编辑

pzweng 发表于 2015-4-14 10:00 static/image/common/back.gif
楼主会调试吗,可以一步一步监视变量值
会调试。也会看变量
但是有个问题:
IF 判断的那个地方不知道出了什么问题,能帮我看下吗?
以下为CAD检查的报错提示:

[检查文字 <未命名 0> 正在加载...]
.
; 错误: 参数太多: (IF (= LENGTHAKG nil) (PROGN ( ... ) ( ... )) (SETQ PCODE ( ... )) ... )
; 检查完成.

ZZXXQQ 发表于 2015-4-15 09:54:41

...
(if (= lengthakg nil);开始出问题的部位,CAD提示 错误: 参数太多:
(setq pcode dwgno pname dwgno)
(progn
(setq pcode(substr dwgno 1 lengthakg));取图号
(setq pcode (strcase pcode));转换为大写
(setq pchengshi (strcat "P" pcode))
(setq lengthakg (+ 2 lengthakg))
(setq pname(substr dwgno lengthakg lengtha));取名称
(setq pname (strcase pname));
))
...

bencat9527 发表于 2015-4-15 20:47:47

我觉的是不是不要用 = 来判断 nil; 这里的条件可以写成 (if (notlengthakg)....

另外,你的这段代码我试着检查了,没有报错:

[检查文字 新建文本文档.lsp 正在加载...]
.
; 检查完成.

我用的是acad2014版下的vlisp

hbgsw 发表于 2015-7-18 15:37:30

已经解决,谢谢各位
页: [1]
查看完整版本: 老是提示程序参数错误,不知道错那里,求组各位大神