这个代码有什么问题?
这个代码有什么问题?(initget "1:20 1:25 1:50 1:100 1:150")
(setq DwgScl (getkword"\n What is Drawing Scale? "))
(setq StyleName (strcat "EC-22-" (rtos DwgScl)))
(setq DimName (strcat "EC-" (rtos dwgscl)))
(if (= DwgScl 1:20)
(progn
(command "-style" EC-22-020 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-020)
(if (= DwgScl 1:25)
(progn
(command "-style" EC-22-025 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-025)
(if (= DwgScl 1:50)
(progn
(command "-style" EC-22-050 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-050)
(if (= DwgScl 1:100)
(progn
(command "-style" EC-22-100 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-100)
(if (= DwgScl 1:150)
(progn
(command "-style" EC-22-150 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-150)))))))))))
所有程序在结束时关闭。因此,每个IF语句接收三个表达式,而不是支持的两个表达式。这是第一眼看到的。
但为什么不使用COND语句呢?
当做
(initget "1:20 1:25 1:50 1:100 1:150")
(setq DwgScl (getkword"\n What is Drawing Scale? "))
(setq StyleName (strcat "EC-22-" (rtos DwgScl)))
(setq DimName (strcat "EC-" (rtos dwgscl)))
(cond
((= DwgScl 1:20)
(command "-style" EC-22-020 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-020))
((= DwgScl 1:25)
(command "-style" EC-22-025 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-025))
((= DwgScl 1:50)
(command "-style" EC-22-050 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-050))
((= DwgScl 1:100)
(command "-style" EC-22-100 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-100))
((= DwgScl 1:150)
(command "-style" EC-22-150 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-150))
(t (coldim)))
但是reutrn这个错误消息
What is Drawing Scale? 1:50
** Error: bad argument type: numberp: "1:50" **
GETKWORD语句将返回一个字符串,但您正试图将其视为实字符串。要从用户输入中获取比例因子,可以使用:
(substr DwgScl 3)
可能需要相应地调整样式名称,或在比例因子仅为两位数的输入中添加“0”。
当做 我不明白
请详细解释
此代码是例程的一部分
我本想设置所有变量,以匹配从bigining创建的公司标准,但isuue是我没有选择这个lisp作为菜单的一部分的文本,所以谁有这个lisp
但是我面临的问题是选择textstyle作为dimstyle
(setq DwgScl (getreal "\n What is Drawing Scale: 1:"))
(command "-units" "2" "0" "1" "0" "0" "n")
(setq StyleName (strcat "EC-22-" (rtos DwgScl)))
(setq DimName (strcat "EC-" (rtos dwgscl)))
(command "-units" "2" "2" "1" "0" "0" "n")
(setq TextHeight (* DwgScl 2.2))
(command "-style" StyleName "romans.shx" TextHeight "08" "0" "n" "n" "n")
(command "-dimstyle" "save" DimName)
(command "DIMSAH" "on")
(command "DIMTIX" On)
(command "insunits" "4")
(setvar "DIMALTF" 25.4)
(setvar "DIMALTTD" 2)
(setvar "DIMASZ" (* 0.2 DwgScl))
(setvar "DIMBLK1" "_OBLIQUE")
(setvar "DIMBLK2" "_OBLIQUE")
(setvar "DIMCEN" 0)
(setvar "DIMCLRD"
(setvar "DIMCLRE"
(setvar "DIMCLRT" 10)
(setvar "DIMDEC" 0)
(setvar "DIMDLE" (* 1 DwgScl))
(setvar "DIMDLI"
(setvar "DIMDSEP" ".")
(setvar "DIMEXE" (* 1 DwgScl))
(setvar "DIMEXO" (* 3 DwgScl))
(setvar "DIMGAP" (* 1 DwgScl))
;(setvar "DIMLDRBLK" "")
(setvar "DIMTDEC" 0)
(setvar "DIMTMOVE" 1)
(setvar "DIMTOLJ" 1)
(setvar "DIMTXT" 12)
(setvar "DIMTZIN" 0)
(setvar "DIMZIN" 0)
你会发现我改变了策略,
lisp将插入一个具有公司标准的dwg文件,因此我想将其中一个作为默认值,用于例程的主要部分。
;To add the vertical ad horizantal dimensions
;which shoing the relation between columns and axes
(defun c:coldim (/ *error* DwgScl P1 P2 P3 P4 SPC TXT UFLAG)
(vl-load-com)
(defun *error* (msg)
(and uFlag (vla-EndUndoMark doc))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ))
(setq OldOS (getvar "osmode"))
(setq OldDynmode (getvar "dynmode"))
(setq OldDynprompt (getvar "dynprompt"))
(setvar "osmode" 33)
(setvar "dynmode" 1)
(setvar "dynprompt" 1)
(command "-insert" "C:/EC-Menu/Blocks/EC-standards.dwg" "0,0,0" "1" "1" "0" "explode" "")
(initget "1:20 1:25 1:50 1:100 1:150")
(setq DwgScl (getkword"\n What is Drawing Scale? "))
;(setq StyleName (strcat "EC-22-" (rtos DwgScl)))
;(setq DimName (strcat "EC-" (rtos dwgscl)))
(cond
((= DwgScl 1:20)
(command "-style" EC-22-020 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-020))
((= DwgScl 1:25)
(command "-style" EC-22-025 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-025))
((= DwgScl 1:50)
(command "-style" EC-22-050 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-050))
((= DwgScl 1:100)
(command "-style" EC-22-100 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-100))
((= DwgScl 1:150)
(command "-style" EC-22-150 "" "" "" "" "" "" "")
(command "-dimstyle" "save" EC-150))
(t (coldim)))
(setq doc (cond (doc) ((vla-get-ActiveDocument
(vlax-get-Acad-Object))))
spc (if (zerop (vla-get-activespace doc))
(if (= (vla-get-mspace doc) :vlax-true)
(vla-get-modelspace doc)
(vla-get-paperspace doc))
(vla-get-modelspace doc)))
(while (and (setq p1 (getpoint "\nPick Axes Crossing Point: "))
(setq p2 (getpoint "\nPick Corner Point: ")))
(setq uFlag (not (vla-StartUndoMark doc)))
(apply (function vla-AddDimRotated)
(append (list spc)
(mapcar
(function vlax-3D-point)
(list (setqp3 (list (car p1) (cadr p2) (caddr p1))) p2
(polar p3 (angle p1 p3) (* DwgScl )))
'(0.)))
(apply (function vla-AddDimRotated)
(append (list spc)
(mapcar
(function vlax-3D-point)
(list p2 (setqp4 (list (car p2) (cadr p1) (caddr p1)))
(polar p4 (angle p1 p4) (* DwgScl )))
(list (/ pi 2.))))
(setq uFlag (vla-EndUndoMark doc))
) ; while
; Restore OSmode
(setq *error* TERR$)
(setvar "osmode" OldOS)
(setvar "dynmode" OldDynmode)
(setvar "dynprompt" OldDynprompt)
(princ "\nProgram completed and will now restore the user settings and exit.")
)
这就是故事。
姆萨苏尽可能清楚地表达了这一点。
(getkword)返回一个字符串,但在下一行中,您将在(rtos)函数中使用该变量,该函数需要一个实数。
如果您还没有,请帮自己一个忙,使用VLIDE编辑和调试代码。这样的错误很容易识别和纠正。 (initget 0 "20 25 50 100 150")
(if (setq DwgScl (getkword "\nSpecify Drawing Scale : 1:"))
(progn
(command "_.-style" (strcat "EC-22-" DwgScl) "" "" "" "" "" "" "")
(if (> 3 (strlen DwgScl))
(command "_.-dimstyle" "_save" (strcat "EC-0" DwgScl))
(command "_.-dimstyle" "_save" (strcat "EC-" DwgScl)))))
这样的事情会不会让事情变得简单一点? 艾伦是的,比以前容易多了
我试着这么做,但我没有找到DXF dimstyle代码(或变量)来设置textstyle 也许是DIMTXSTY?
页:
[1]