asos2000 发表于 2022-7-6 11:38:02

这个代码有什么问题?

这个代码有什么问题?

(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)))))))))))

MSasu 发表于 2022-7-6 11:46:36

所有程序在结束时关闭。因此,每个IF语句接收三个表达式,而不是支持的两个表达式。这是第一眼看到的。
 
但为什么不使用COND语句呢?
 
当做

asos2000 发表于 2022-7-6 11:56:09


(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" **

MSasu 发表于 2022-7-6 12:01:23

GETKWORD语句将返回一个字符串,但您正试图将其视为实字符串。要从用户输入中获取比例因子,可以使用:
 
(substr DwgScl 3)
 
可能需要相应地调整样式名称,或在比例因子仅为两位数的输入中添加“0”。
 
当做

asos2000 发表于 2022-7-6 12:09:21

我不明白
请详细解释
 
此代码是例程的一部分
 
我本想设置所有变量,以匹配从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.")
)
 
这就是故事。

rkmcswain 发表于 2022-7-6 12:20:13

 
姆萨苏尽可能清楚地表达了这一点。
 
(getkword)返回一个字符串,但在下一行中,您将在(rtos)函数中使用该变量,该函数需要一个实数。
 
如果您还没有,请帮自己一个忙,使用VLIDE编辑和调试代码。这样的错误很容易识别和纠正。

alanjt 发表于 2022-7-6 12:24:23

(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)))))
 
这样的事情会不会让事情变得简单一点?

asos2000 发表于 2022-7-6 12:37:29

艾伦是的,比以前容易多了
 
我试着这么做,但我没有找到DXF dimstyle代码(或变量)来设置textstyle

MSasu 发表于 2022-7-6 12:40:22

也许是DIMTXSTY?
页: [1]
查看完整版本: 这个代码有什么问题?