乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 视口比例

[复制链接]

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 10:14:23 | 显示全部楼层 |阅读模式
我正在设置一个列表,根据视口比例将dimstyle和leader样式设置为默认值。(如果图形为1:100,则该样式将成为默认样式)。我把这变成了一个手动过程,但在尝试计算视口比例(自定义比例)时,我能想到的只是JTB世界中的一个例子:;;;getvpscale。lsp
  1. ;;;
  2. ;;; Get Viewport Scale in active viewport or in selected
  3. ;;; Supports viewports with clipping boundary
  4. ;;; By Jimmy Bergmark
  5. ;;; Copyright (C) 1997-2006 JTB World, All Rights Reserved
  6. ;;; Website: [url="http://www.jtbworld.com"]www.jtbworld.com[/url]
  7. ;;; E-mail: [email="info@jtbworld.com"]info@jtbworld.com[/email]
  8. ;;; 2000-05-03 - First release
  9. ;;; 2000-05-09 - Detects perspective view
  10. ;;; Tested on AutoCAD 2000
  11. (defun c:getvpscale (/ ss ent)
  12. (defun printscale (/  data cvsize cvhgt)
  13. (setq cvscale (vla-get-customscale (vlax-ename->vla-object ent)))
  14. (princ "\nPS:MS == ")
  15. (cond
  16.    ((> cvscale 1)
  17.     (princ (rtos cvscale 2))
  18.     (princ ":1")
  19.    )
  20.    (T
  21.     (princ "1:")
  22.     (princ (rtos (/ 1 cvscale) 2))
  23.    )
  24. )
  25. )
  26. (vl-load-com)
  27. (if (= (getvar "tilemode") 0)
  28.    (if (= (getvar "cvport") 1)
  29.      (if (/= (setq ss (ssget ":E:S" '((0 . "VIEWPORT")))) nil)
  30.        (if (/= 1 (logand 1 (cdr (assoc 90 (entget (setq ent (ssname ss 0)))))))
  31.          (printscale)
  32.          (princ "\n Command not allowed in perspective view.")
  33.        )
  34.        (princ " No viewport found.")
  35.      )
  36.      (progn
  37.        (setq ent (vlax-vla-object->ename
  38.                    (vla-get-activepviewport
  39.                      (vla-get-activedocument (vlax-get-acad-object)))))
  40.        (if (/= 1 (logand 1 (cdr (assoc 90 (entget ent)))))
  41.          (printscale)
  42.          (princ "\n Command not allowed in perspective view.")
  43.        )
  44.      )
  45.    )
  46.    (princ "\n Command not allowed unless TILEMODE is set to 0.")
  47. )
  48. (princ)
  49. )
  50. ;;; return viewport scale if allowed else nil
  51. (defun getvpscale1 (/ ss ent)
  52. (vl-load-com)
  53. (if (= (getvar "tilemode") 0)
  54.    (if (= (getvar "cvport") 1)
  55.      (if (/= (setq ss (ssget ":E:S" '((0 . "VIEWPORT")))) nil)
  56.        (if (/= 1 (logand 1 (cdr (assoc 90 (entget (setq ent (ssname ss 0)))))))
  57.          (vla-get-customscale (vlax-ename->vla-object ent))
  58.        )
  59.      )
  60.      (progn
  61.        (setq ent (vlax-vla-object->ename
  62.                    (vla-get-activepviewport
  63.                      (vla-get-activedocument (vlax-get-acad-object)))))
  64.        (if (/= 1 (logand 1 (cdr (assoc 90 (entget ent)))))
  65.          (vla-get-customscale (vlax-ename->vla-object ent))
  66.        )
  67.      )
  68.    )
  69. )
  70. )
  71. ;;; return viewport scale if allowed else nil
  72. ;;; no support for perspective view
  73. (defun getvpscale2 (/ ss vpno vpsc)
  74. (if (= (getvar "tilemode") 0)
  75.    (if (= (getvar "cvport") 1)
  76.      (if (/= (setq ss (ssget ":E:S" '((0 . "VIEWPORT")))) nil)
  77.        (progn
  78.          (setq vpno (cdr (assoc 69 (entget (ssname ss 0)))))
  79.          (command "_.mspace")
  80.          (setvar "cvport" vpno)
  81.          (setq vpsc (caddr (trans '(0 0 1) 2 3)))
  82.          (command "_.pspace")
  83.          vpsc
  84.        )
  85.      )
  86.      (caddr (trans '(0 0 1) 2 3))
  87.    )
  88. )
  89. )
  90. ;;; return viewport scale
  91. ;;; no support for viewports with clipping boundary
  92. ;;; no support for perspective view
  93. (defun getvpscale3(/ vpno vpsc)
  94. (setq vpno (cdr (assoc 69 (entget (car (entsel))))))
  95. (command "mspace")
  96. (setvar "cvport" vpno)
  97. (setq vpsc (caddr (trans '(0 0 1) 2 3)))
  98. (command "pspace")
  99. vpsc
  100. )
  101. ;;; return scale in active viewport
  102. ;|
  103. (caddr (trans '(0 0 1) 2 3))
  104. |;

 
 
我需要经历所有这些才能得到视口比例吗??
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:18:00 | 显示全部楼层
  1. (/ 1. (vla-get-customscale (vlax-ename->vla-object (car (entsel)))))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:22:07 | 显示全部楼层
另一个,对于那些厌恶VL的人。。。
 
  1. (defun VPScale ( / e )
  2. (cond
  3.    (
  4.      (and (setq e (car (entsel)))
  5.           (eq "VIEWPORT" (cdr (assoc 0 (setq e (entget e)))))
  6.      )
  7.      (/ (cdr (assoc 45 e)) (cdr (assoc 41 e)))
  8.    )
  9. )
  10. )
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 10:26:21 | 显示全部楼层
谢谢各位,
这是我到目前为止为lisp准备的,我想用它来加载暗显和引线样式,并根据视口比例设置默认值。
  1. (defun c:dim_Load(/e b c)
  2. (command "_.insert" "CCC_Drawing_Dim_Leader_Styles=" nil)
  3. (command "_.purge" "_b" "CCC_Drawing_Dim_Leader_Styles" "_n")
  4. (progn
  5. (cond
  6.    (
  7.      (and (setq e (car (entsel)))
  8.           (eq "VIEWPORT" (cdr (assoc 0 (setq e (entget e)))))
  9.      )
  10.      (/ (cdr (assoc 45 e)) (cdr (assoc 41 e)))
  11.    )
  12. )
  13. )
  14. (progn
  15.    (cond
  16.      ((= e 0.02)(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
  17.      ((= e 0.04)(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
  18.      ((= e 0.05)(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
  19.      ((= e 0.1)(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
  20.      ((= e 0.2)(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
  21.      ((= e 0.4)(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
  22.      ((= e 0.5)(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
  23.      ((= e 0.(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
  24.      ((= e 1)(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
  25.      ((= e 2)(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
  26.      ((= e 4)(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
  27.      ((= e 5)(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
  28.      ((= e (setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
  29.      ((= e 10)(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
  30.      ((= e 20)(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
  31.      ((= e 40)(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
  32.      ((= e 50)(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
  33.      ((= e 100)(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
  34.    )
  35. )
  36. (command "_.dimstyle" "r" b)
  37. (princ)
  38. )

 
关于“争论太少”,我有一些错误。有人能指出错误在哪里吗?谢谢
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 10:27:48 | 显示全部楼层
伍德曼78,
 
你又做了一次,慢点!
  1. ;
  2. You have this.
  3. (defun c:dim_Load(/e b c)
  4. ;
  5. Do this.
  6. (defun c:dim_Load[color=red] (/[/color][color=red] e[/color] b c)
  7. ;

 
在斜线和e之间留一个空格。
我以前跟你提过好几次。你真的需要练习更好的格式化。
 
另一件事,它与这个问题无关。
去掉progn,如果您使用cond,则不需要它。如果是如果,那就另当别论了。
  1. [color=red](progn[/color]
  2. [color=red][color=black](cond[/color]
  3. [color=black]([/color]
  4. [color=black]  (and (setq e (car (entsel)))[/color]
  5. [color=black]       (eq "VIEWPORT" (cdr (assoc 0 (setq e (entget e)))))[/color]
  6. [color=black]  )[/color]
  7. [color=black]  (/ (cdr (assoc 45 e)) (cdr (assoc 41 e)))[/color]
  8. [color=black])[/color]
  9. [color=black])[/color]
  10. [/color][color=red])[/color]
  11. [color=red](progn[/color]
  12.    (cond
  13.      ((= e 0.02)(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
  14.      ((= e 0.04)(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
  15.      ((= e 0.05)(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
  16.      ((= e 0.1)(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
  17.      ((= e 0.2)(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
  18.      ((= e 0.4)(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
  19.      ((= e 0.5)(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
  20.      ((= e 0.(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
  21.      ((= e 1)(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
  22.      ((= e 2)(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
  23.      ((= e 4)(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
  24.      ((= e 5)(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
  25.      ((= e (setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
  26.      ((= e 10)(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
  27.      ((= e 20)(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
  28.      ((= e 40)(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
  29.      ((= e 50)(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
  30.      ((= e 100)(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
  31.    )
  32. [color=red])[/color]
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 10:30:49 | 显示全部楼层
 
甚至。。。。
 
  1. (caddr (trans '(0 0 1) 2 3))
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:34:26 | 显示全部楼层
 
也许是第40组代替第45组?
 
  1. (trans '(0 0 1) 2 3)

 
如果目标和摄像机系统变量不是面向WCS的'(0 0)与'(0 0 1),请注意2参数
 
(命令“_.MSPACE”“_.DVIEW”“”“\u PO”“(2 3 4)'(4 5 6)”)
 
-大卫
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 10:39:14 | 显示全部楼层
我一直在尝试查看变量e是否设置为视口比例。我添加了一个警报框来显示e的值,但我不断地出错。
 
  1. (defun c:dim_Load(/ e b c)
  2. (command "_.insert" "CCC_Drawing_Dim_Leader_Styles=" nil)
  3. (command "_.purge" "_b" "CCC_Drawing_Dim_Leader_Styles" "_n")
  4. (cond
  5.    (
  6.      (and (setq e (car (entsel)))
  7.           (eq "VIEWPORT" (cdr (assoc 0 (setq e (entget e)))))
  8.      )
  9.      (/ (cdr (assoc 40 e)) (cdr (assoc 41 e)))
  10.    )
  11. )
  12. (alert "Viewport Scale"e)
  13.    (cond
  14.      ((= e 0.02)(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
  15.      ((= e 0.04)(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
  16.      ((= e 0.05)(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
  17.      ((= e 0.1)(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
  18.      ((= e 0.2)(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
  19.      ((= e 0.4)(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
  20.      ((= e 0.5)(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
  21.      ((= e 0.(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
  22.      ((= e 1)(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
  23.      ((= e 2)(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
  24.      ((= e 4)(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
  25.      ((= e 5)(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
  26.      ((= e (setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
  27.      ((= e 10)(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
  28.      ((= e 20)(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
  29.      ((= e 40)(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
  30.      ((= e 50)(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
  31.      ((= e 100)(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
  32.    )
  33. (command "_.dimstyle" "r" b)
  34. (princ)
  35. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:41:47 | 显示全部楼层
我不太明白你想做什么,但是:
 
  1. [b][color=BLACK]([/color][/b]defun c:db-vps [b][color=FUCHSIA]([/color][/b]/ cv ss en ed ys vs[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]/= [b][color=MAROON]([/color][/b]getvar [color=#2f4f4f]"TILEMODE"[/color][b][color=MAROON])[/color][/b] 0[b][color=NAVY])[/color][/b]
  3.      [b][color=NAVY]([/color][/b]setvar [color=#2f4f4f]"TILEMODE"[/color] 0[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  4. [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]/= [b][color=MAROON]([/color][/b]getvar [color=#2f4f4f]"CVPORT"[/color][b][color=MAROON])[/color][/b] 1[b][color=NAVY])[/color][/b]
  5.      [b][color=NAVY]([/color][/b]progn
  6.         [b][color=MAROON]([/color][/b]setq ss [b][color=GREEN]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=BLUE]([/color][/b]list [b][color=RED]([/color][/b]cons 0 [color=#2f4f4f]"VIEWPORT"[/color][b][color=RED])[/color][/b][b][color=RED]([/color][/b]cons 69 [b][color=PURPLE]([/color][/b]getvar [color=#2f4f4f]"CVPORT"[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  7.               en [b][color=GREEN]([/color][/b]ssname ss 0[b][color=GREEN])[/color][/b]
  8.               ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b]
  9.               cv [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 69 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  10.               ys [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 41 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  11.         [b][color=MAROON]([/color][/b]command [color=#2f4f4f]"_.MSPACE"[/color][b][color=MAROON])[/color][/b]
  12.         [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"CVPORT"[/color] cv[b][color=MAROON])[/color][/b]
  13.         [b][color=MAROON]([/color][/b]setq vs [b][color=GREEN]([/color][/b]getvar [color=#2f4f4f]"VIEWSIZE"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  14.         [b][color=MAROON]([/color][/b]princ [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"\nThe VIEWPORT Scale is 1 = "[/color] [b][color=BLUE]([/color][/b]rtos [b][color=RED]([/color][/b]/ vs ys[b][color=RED])[/color][/b] 2 4[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  15.         [b][color=MAROON]([/color][/b]princ [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"\nThe VIEWPORT Scale is "[/color] [b][color=BLUE]([/color][/b]rtos [b][color=RED]([/color][/b]/ ys vs[b][color=RED])[/color][/b] 2 8[b][color=BLUE])[/color][/b] [color=#2f4f4f]" = 1"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  16.      [b][color=NAVY]([/color][/b]alert [color=#2f4f4f]"\nYour Are Not In An Active MODELSPACE Viewport"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  17. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
(/dxf40 dxf41)仅提供视口的x与y比例。没什么用。
 
 
如果要使用比较,则需要将(equal)与fuzz一起使用-大卫
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 10:44:47 | 显示全部楼层
 
我也不确定你到底在做什么。我知道你没有像以前那样犯那个论点错误。该程序正在寻找一些我认为是你没有提供的dimstyle,所以进一步检查是有限的。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 21:09 , Processed in 0.413809 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表