明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1765|回复: 9

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

[复制链接]
发表于 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)
)
发表于 2015-4-14 07:28:28 来自手机 | 显示全部楼层
是不是要把(getvar "dwgname")获取的路径字符串里面的//替换成/然后再处理? 没搞过不知道
 楼主| 发表于 2015-4-14 08:23:49 | 显示全部楼层
取的只是文件名,不是路径啊,!
发表于 2015-4-14 09:41:28 | 显示全部楼层
dwgdir 从何而来?
发表于 2015-4-14 10:00:28 | 显示全部楼层
楼主会调试吗,可以一步一步监视变量值
 楼主| 发表于 2015-4-14 20:26:28 | 显示全部楼层
aihuyujian 发表于 2015-4-14 09:41
dwgdir 从何而来?

(setq totaldir "C:/Program Files/FlexCAD")
(setq dwgdir (strcat totaldir "/document/dwg/"))              ;;;设定dwg文件的目录变量  
在CAD启动的时候 有加载设置目录
所以这里是可以的
但是就是不知道为什么取零件图号和名称的时候老是有问题。
 楼主| 发表于 2015-4-14 20:29:08 | 显示全部楼层
本帖最后由 hbgsw 于 2015-4-14 22:40 编辑
pzweng 发表于 2015-4-14 10:00
楼主会调试吗,可以一步一步监视变量值

会调试。也会看变量
但是有个问题:
IF 判断的那个地方不知道出了什么问题,能帮我看下吗?
以下为CAD检查的报错提示:

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

发表于 2015-4-15 09:54:41 | 显示全部楼层
  1. ...
  2. (if (= lengthakg nil)  ;开始出问题的部位,CAD提示 错误: 参数太多:
  3.   (setq pcode dwgno pname dwgno)
  4. (progn
  5.   (setq pcode(substr dwgno 1 lengthakg));取图号
  6.   (setq pcode (strcase pcode));转换为大写
  7.   (setq pchengshi (strcat "P" pcode))
  8.   (setq lengthakg (+ 2 lengthakg))
  9.   (setq pname(substr dwgno lengthakg lengtha));取名称
  10.   (setq pname (strcase pname));
  11. ))
  12. ...
发表于 2015-4-15 20:47:47 | 显示全部楼层
我觉的是不是不要用 = 来判断 nil; 这里的条件可以写成 (if (not  lengthakg)....

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

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

我用的是acad2014版下的vlisp
 楼主| 发表于 2015-7-18 15:37:30 | 显示全部楼层
已经解决,谢谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 15:18 , Processed in 0.218105 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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