老是提示程序参数错误,不知道错那里,求组各位大神
本帖最后由 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)
)
是不是要把(getvar "dwgname")获取的路径字符串里面的//替换成/然后再处理? 没搞过不知道 取的只是文件名,不是路径啊,! dwgdir 从何而来? 楼主会调试吗,可以一步一步监视变量值 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 22:40 编辑
pzweng 发表于 2015-4-14 10:00 static/image/common/back.gif
楼主会调试吗,可以一步一步监视变量值
会调试。也会看变量
但是有个问题:
IF 判断的那个地方不知道出了什么问题,能帮我看下吗?
以下为CAD检查的报错提示:
[检查文字 <未命名 0> 正在加载...]
.
; 错误: 参数太多: (IF (= LENGTHAKG nil) (PROGN ( ... ) ( ... )) (SETQ PCODE ( ... )) ... )
; 检查完成.
...
(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));
))
... 我觉的是不是不要用 = 来判断 nil; 这里的条件可以写成 (if (notlengthakg)....
另外,你的这段代码我试着检查了,没有报错:
[检查文字 新建文本文档.lsp 正在加载...]
.
; 检查完成.
我用的是acad2014版下的vlisp 已经解决,谢谢各位
页:
[1]