Lee Mac 发表于 2022-7-6 10:46:36

 
当然这只是得到视口大小比,而不是比例?

David Bethel 发表于 2022-7-6 10:49:18

 
 
啊哈,我看到他们增加了45(mspace中的viewsize)。
 
   A U T O C A D (R)
Copyright (c) 1982-1998Autodesk, Inc.All Rights Reserved.
Release 14.01 (4/21/98) Microsoft Windows NT Version 5.1 (x86)
Entity Information ....

Select objects: 1 found

Select objects:      <RO> Entity Name - (-1 . <Entity name: 4e21618>)
   <RO> Entity Type - (0 . "VIEWPORT")
      <RO> Handle - (5 . "223")
      <RO> SubClass - (100 . "AcDbEntity")
      Paper Space - (67 . 1)
            Layer - (8 . "PLOT")
            Color - (62 . 6)
      <RO> SubClass - (100 . "AcDbViewport")
      First Point - (10 53.5 59.75 0.0)
         <RO> Width - (40 . 35.0)
      <RO> Height - (41 . 23.5)
      <RO> Status - (68 . 6)
            <RO> ID - (69 . 5)
         <RO> APPID - (-3 ("ACAD" (1000 . "MVIEW") (1002 . "{") (1070 . 16)
(1010 0.0 0.0 0.0) (1010 0.0 0.0 1.0) (1040 . 0.0) (1040 . 585.0) (1040 .
339.638) (1040 . 221.5) (1040 . 50.0) (1040 . 0.0) (1040 . 0.0) (1070 . 0)
(1070 . 50) (1070 . 1) (1070 . 1) (1070 . 1) (1070 . 0) (1070 . 0) (1070 . 1)
(1040 . 0.0) (1040 . 0.0) (1040 . 0.0) (1040 . 1.0) (1040 . 1.0) (1040 . 12.0)
(1040 . 12.0) (1070 . 1) (1002 . "{") (1003 . "1D") (1003 . "2D") (1003 .
"FS-EL") (1003 . "FS-DIM") (1003 . "FS-PL") (1003 . "FS-GA") (1003 . "FS-")
(1003 . "FS-SLAB") (1003 . "CL") (1003 . "FS-WB") (1003 . "FS-PVC") (1003 .
"FS-ST") (1003 . "FS-RF") (1003 . "200") (1003 . "200-2D-ONLY") (1003 . "204")
(1003 . "204-2D-ONLY") (1003 . "206") (1003 . "206-2D-ONLY") (1003 .
"206-KCL-DO") (1003 . "206-KCL-DS") (1003 . "400") (1003 . "406") (1003 .
"450") (1003 . "460") (1003 . "470") (1003 . "480") (1003 . "490") (1003 .
"350") (1003 . "201") (1003 . "201-2D-ONLY") (1003 . "202") (1003 .
"202-2D-ONLY") (1003 . "700") (1003 . "700-3D-ONLY") (1003 . "300") (1003 .
"306") (1003 . "205") (1002 . "}") (1002 . "}")))

 
R14 DXF转储
 
-大卫

alanjt 发表于 2022-7-6 10:54:22

(defun _VPScale (obj)
(cond
   ((eq (type obj) 'VLA-OBJECT) (/ 1. (vla-get-customscale obj)))
   ((eq (type obj) 'ENAME) ((lambda (e) (/ (cdr (assoc 45 e)) (cdr (assoc 41 e)))) (entget obj)))
)
)

woodman78 发表于 2022-7-6 10:56:53

伙计们,我正在尝试获取视口比例,并在此基础上将dimstyle和leader样式设置为当前。不过我似乎有点迷路了。有人能帮忙吗?
 

(defun c:vpdisp (/ cv ss en ed ys vs vps b c)
(command "_.insert" "CCC_Drawing_Dim_Leader_Styles=" nil)
(command "_.purge" "_b" "CCC_Drawing_Dim_Leader_Styles" "_n")
      (command "_.MSPACE")
(if (/= (getvar "TILEMODE") 0)
   (setvar "TILEMODE" 0))
(if (/= (getvar "CVPORT") 1)
   (progn
      (setq ss (ssget "X" (list (cons 0 "VIEWPORT")(cons 69 (getvar "CVPORT"))))
            en (ssname ss 0)
            ed (entget en)
            cv (cdr (assoc 69 ed))
            ys (cdr (assoc 41 ed)))
      (command "_.PSPACE")
      (setvar "CVPORT" cv)
      (setq vs (getvar "VIEWSIZE")
    vps (rtos (/ vs ys) 2 4))
      (princ (strcat "\nThe VIEWPORT Scale is 1 = " vps)))
   (cond
   ((= vps 0.02)(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
   ((= vps 0.04)(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
   ((= vps 0.05)(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
   ((= vps 0.1)(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
   ((= vps 0.2)(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
   ((= vps 0.4)(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
   ((= vps 0.5)(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
   ((= vps 0.(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
   ((= vps 1)(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
   ((= vps 2)(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
   ((= vps 4)(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
   ((= vps 5)(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
   ((= vps (setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
   ((= vps 10)(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
   ((= vps 20)(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
   ((= vps 40)(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
   ((= vps 50)(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
   ((= vps 100)(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
   )
(command "_.dimstyle" "r" b)
   (alert "\nYour Are Not In An Active MODELSPACE Viewport"))
(prin1))

woodman78 发表于 2022-7-6 11:00:19

在过去的几天里,我一直在研究这个问题,我不断发现语法错误。有人能帮忙吗??
 

(defun c:vpdisp (/ cv ss en ed ys vs vps b c)
(command "_.insert" "CCC_Drawing_Dim_Leader_Styles=" nil)
(command "_.purge" "_b" "CCC_Drawing_Dim_Leader_Styles" "_n")
      (command "_.MSPACE")
(if (/= (getvar "TILEMODE") 0)
   (setvar "TILEMODE" 0))
(if (/= (getvar "CVPORT") 1)
   (progn
      (setq ss (ssget "X" (list (cons 0 "VIEWPORT")(cons 69 (getvar "CVPORT"))))
            en (ssname ss 0)
            ed (entget en)
            cv (cdr (assoc 69 ed))
            ys (cdr (assoc 41 ed)))
      (command "_.PSPACE")
      (setvar "CVPORT" cv)
      (setq vs (getvar "VIEWSIZE"))
      (setq vps (rtos (/ vs ys) 2 4))
   (alert "\nYour Are Not In An Active MODELSPACE Viewport")
   (cond
   ((= vps 0.02)(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
   ((= vps 0.04)(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
   ((= vps 0.05)(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
   ((= vps 0.1)(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
   ((= vps 0.2)(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
   ((= vps 0.4)(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
   ((= vps 0.5)(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
   ((= vps 0.(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
   ((= vps 1)(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
   ((= vps 2)(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
   ((= vps 4)(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
   ((= vps 5)(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
   ((= vps (setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
   ((= vps 10)(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
   ((= vps 20)(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
   ((= vps 40)(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
   ((= vps 50)(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
   ((= vps 100)(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
   ))
(prin1))

rkmcswain 发表于 2022-7-6 11:04:32

一般来说,语法错误很容易发现/修复。
如果您正在VLIDE中编辑,请运行“在编辑器中检查文本”命令。这将告诉您静态代码中是否有错误。
如果不明显,则将光标放在左括号[在(defun…]旁边,然后双击。
您的所有代码都突出显示了吗?如果不是,那就是你的问题——括号不匹配。
在这种情况下,看起来您只是在文件末尾缺少了一个右括号。

woodman78 发表于 2022-7-6 11:05:01

谢谢你的提示。老实说,我有点避开了vlide,因为我总是发现它很难使用。不过我接受了你的建议,取得了很大的进步。以后我会先把我的错误提交给vlide。这是我到目前为止得到的:
 

(defun c:vpdisp (/ cv ss en ed ys vs vps b c)
(command "_.insert" "CCC_Drawing_Dim_Leader_Styles=" nil)
(command "_.purge" "_b" "CCC_Drawing_Dim_Leader_Styles" "_n")
      (command "_.MSPACE")
(if (/= (getvar "TILEMODE") 0)
   (setvar "TILEMODE" 0))
(if (/= (getvar "CVPORT") 1)
   (progn
      (setq ss (ssget "X" (list (cons 0 "VIEWPORT")(cons 69 (getvar "CVPORT"))))
            en (ssname ss 0)
            ed (entget en)
            cv (cdr (assoc 69 ed))
            ys (cdr (assoc 41 ed)))
      (command "_.PSPACE")
      ;(setvar "CVPORT" cv)
      (setq vs (getvar "VIEWSIZE"))
      (setq vps (rtos (/ vs ys) 2 4))
;(princ (strcat "\nThe VIEWPORT Scale is 1 = " vps))
         ;(setq vps "0.8")
   ;(alert "\nYour Are Not In An Active MODELSPACE Viewport")
   )
)
(cond
   ((= vps "0.02")(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
   ((= vps "0.04")(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
   ((= vps "0.05")(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
   ((= vps "0.1")(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
   ((= vps "0.2")(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
   ((= vps "0.4")(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
   ((= vps "0.5")(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
   ((= vps "0.8")(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
   ((= vps "1")(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
   ((= vps "2")(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
   ((= vps "4")(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
   ((= vps "5")(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
   ((= vps "8")(setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
   ((= vps "10")(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
   ((= vps "20")(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
   ((= vps "40")(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
   ((= vps "50")(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
   ((= vps "100")(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
   )
(command "_.dimstyle" "r" b)
(prin1))

 
我的问题是没有正确计算视口比例,因此没有设置维度。我将vps变量设置为标准值,并将dimstyle设置为精细。我看了Alanjt获取视口比例的方法,但我不知道如何合并它。我一直在尝试将其写入代码时出错。
 
有人能帮助进行视口比例计算吗?
 
谢谢

David Bethel 发表于 2022-7-6 11:09:16

尝试
 
(equal (/ vs ys) 0.02 1e-2)
or
(= vps "0.0200")

 
对于每个值。
 
如果使用字符串比较,请确保DIMZIN设置为0-大卫

woodman78 发表于 2022-7-6 11:12:27

对不起,大卫,但这怎么合适呢?0.02 1e-2)中的e是一个变量吗?

rkmcswain 发表于 2022-7-6 11:17:30

 
这是一个实数。
提示:查看rtos 1e-2 2返回的内容
页: 1 [2]
查看完整版本: 视口比例