视口比例
我正在设置一个列表,根据视口比例将dimstyle和leader样式设置为默认值。(如果图形为1:100,则该样式将成为默认样式)。我把这变成了一个手动过程,但在尝试计算视口比例(自定义比例)时,我能想到的只是JTB世界中的一个例子:;;;getvpscale。lsp;;;
;;; Get Viewport Scale in active viewport or in selected
;;; Supports viewports with clipping boundary
;;; By Jimmy Bergmark
;;; Copyright (C) 1997-2006 JTB World, All Rights Reserved
;;; Website: www.jtbworld.com
;;; E-mail: info@jtbworld.com
;;; 2000-05-03 - First release
;;; 2000-05-09 - Detects perspective view
;;; Tested on AutoCAD 2000
(defun c:getvpscale (/ ss ent)
(defun printscale (/data cvsize cvhgt)
(setq cvscale (vla-get-customscale (vlax-ename->vla-object ent)))
(princ "\nPS:MS == ")
(cond
((> cvscale 1)
(princ (rtos cvscale 2))
(princ ":1")
)
(T
(princ "1:")
(princ (rtos (/ 1 cvscale) 2))
)
)
)
(vl-load-com)
(if (= (getvar "tilemode") 0)
(if (= (getvar "cvport") 1)
(if (/= (setq ss (ssget ":E:S" '((0 . "VIEWPORT")))) nil)
(if (/= 1 (logand 1 (cdr (assoc 90 (entget (setq ent (ssname ss 0)))))))
(printscale)
(princ "\n Command not allowed in perspective view.")
)
(princ " No viewport found.")
)
(progn
(setq ent (vlax-vla-object->ename
(vla-get-activepviewport
(vla-get-activedocument (vlax-get-acad-object)))))
(if (/= 1 (logand 1 (cdr (assoc 90 (entget ent)))))
(printscale)
(princ "\n Command not allowed in perspective view.")
)
)
)
(princ "\n Command not allowed unless TILEMODE is set to 0.")
)
(princ)
)
;;; return viewport scale if allowed else nil
(defun getvpscale1 (/ ss ent)
(vl-load-com)
(if (= (getvar "tilemode") 0)
(if (= (getvar "cvport") 1)
(if (/= (setq ss (ssget ":E:S" '((0 . "VIEWPORT")))) nil)
(if (/= 1 (logand 1 (cdr (assoc 90 (entget (setq ent (ssname ss 0)))))))
(vla-get-customscale (vlax-ename->vla-object ent))
)
)
(progn
(setq ent (vlax-vla-object->ename
(vla-get-activepviewport
(vla-get-activedocument (vlax-get-acad-object)))))
(if (/= 1 (logand 1 (cdr (assoc 90 (entget ent)))))
(vla-get-customscale (vlax-ename->vla-object ent))
)
)
)
)
)
;;; return viewport scale if allowed else nil
;;; no support for perspective view
(defun getvpscale2 (/ ss vpno vpsc)
(if (= (getvar "tilemode") 0)
(if (= (getvar "cvport") 1)
(if (/= (setq ss (ssget ":E:S" '((0 . "VIEWPORT")))) nil)
(progn
(setq vpno (cdr (assoc 69 (entget (ssname ss 0)))))
(command "_.mspace")
(setvar "cvport" vpno)
(setq vpsc (caddr (trans '(0 0 1) 2 3)))
(command "_.pspace")
vpsc
)
)
(caddr (trans '(0 0 1) 2 3))
)
)
)
;;; return viewport scale
;;; no support for viewports with clipping boundary
;;; no support for perspective view
(defun getvpscale3(/ vpno vpsc)
(setq vpno (cdr (assoc 69 (entget (car (entsel))))))
(command "mspace")
(setvar "cvport" vpno)
(setq vpsc (caddr (trans '(0 0 1) 2 3)))
(command "pspace")
vpsc
)
;;; return scale in active viewport
;|
(caddr (trans '(0 0 1) 2 3))
|;
我需要经历所有这些才能得到视口比例吗?? (/ 1. (vla-get-customscale (vlax-ename->vla-object (car (entsel))))) 另一个,对于那些厌恶VL的人。。。
(defun VPScale ( / e )
(cond
(
(and (setq e (car (entsel)))
(eq "VIEWPORT" (cdr (assoc 0 (setq e (entget e)))))
)
(/ (cdr (assoc 45 e)) (cdr (assoc 41 e)))
)
)
) 谢谢各位,
这是我到目前为止为lisp准备的,我想用它来加载暗显和引线样式,并根据视口比例设置默认值。
(defun c:dim_Load(/e b c)
(command "_.insert" "CCC_Drawing_Dim_Leader_Styles=" nil)
(command "_.purge" "_b" "CCC_Drawing_Dim_Leader_Styles" "_n")
(progn
(cond
(
(and (setq e (car (entsel)))
(eq "VIEWPORT" (cdr (assoc 0 (setq e (entget e)))))
)
(/ (cdr (assoc 45 e)) (cdr (assoc 41 e)))
)
)
)
(progn
(cond
((= e 0.02)(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
((= e 0.04)(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
((= e 0.05)(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
((= e 0.1)(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
((= e 0.2)(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
((= e 0.4)(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
((= e 0.5)(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
((= e 0.(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
((= e 1)(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
((= e 2)(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
((= e 4)(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
((= e 5)(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
((= e (setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
((= e 10)(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
((= e 20)(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
((= e 40)(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
((= e 50)(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
((= e 100)(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
)
)
(command "_.dimstyle" "r" b)
(princ)
)
关于“争论太少”,我有一些错误。有人能指出错误在哪里吗?谢谢 伍德曼78,
你又做了一次,慢点!
;
You have this.
(defun c:dim_Load(/e b c)
;
Do this.
(defun c:dim_Load (/ e b c)
;
在斜线和e之间留一个空格。
我以前跟你提过好几次。你真的需要练习更好的格式化。
另一件事,它与这个问题无关。
去掉progn,如果您使用cond,则不需要它。如果是如果,那就另当别论了。
(progn
(cond
(
(and (setq e (car (entsel)))
(eq "VIEWPORT" (cdr (assoc 0 (setq e (entget e)))))
)
(/ (cdr (assoc 45 e)) (cdr (assoc 41 e)))
)
)
)
(progn
(cond
((= e 0.02)(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
((= e 0.04)(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
((= e 0.05)(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
((= e 0.1)(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
((= e 0.2)(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
((= e 0.4)(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
((= e 0.5)(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
((= e 0.(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
((= e 1)(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
((= e 2)(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
((= e 4)(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
((= e 5)(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
((= e (setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
((= e 10)(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
((= e 20)(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
((= e 40)(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
((= e 50)(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
((= e 100)(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
)
)
甚至。。。。
(caddr (trans '(0 0 1) 2 3))
也许是第40组代替第45组?
(trans '(0 0 1) 2 3)
如果目标和摄像机系统变量不是面向WCS的'(0 0)与'(0 0 1),请注意2参数
(命令“_.MSPACE”“_.DVIEW”“”“\u PO”“(2 3 4)'(4 5 6)”)
-大卫 我一直在尝试查看变量e是否设置为视口比例。我添加了一个警报框来显示e的值,但我不断地出错。
(defun c:dim_Load(/ e b c)
(command "_.insert" "CCC_Drawing_Dim_Leader_Styles=" nil)
(command "_.purge" "_b" "CCC_Drawing_Dim_Leader_Styles" "_n")
(cond
(
(and (setq e (car (entsel)))
(eq "VIEWPORT" (cdr (assoc 0 (setq e (entget e)))))
)
(/ (cdr (assoc 40 e)) (cdr (assoc 41 e)))
)
)
(alert "Viewport Scale"e)
(cond
((= e 0.02)(setq b "CCC_1_50000_Dims")(setq c "CCC_Leader_1_50000"))
((= e 0.04)(setq b "CCC_1_25000_Dims")(setq c "CCC_Leader_1_25000"))
((= e 0.05)(setq b "CCC_1_20000_Dims")(setq c "CCC_Leader_1_20000"))
((= e 0.1)(setq b "CCC_1_10000_Dims")(setq c "CCC_Leader_1_10000"))
((= e 0.2)(setq b "CCC_1_5000_Dims")(setq c "CCC_Leader_1_5000"))
((= e 0.4)(setq b "CCC_1_2500_Dims")(setq c "CCC_Leader_1_2500"))
((= e 0.5)(setq b "CCC_1_2000_Dims")(setq c "CCC_Leader_1_2000"))
((= e 0.(setq b "CCC_1_1250_Dims")(setq c "CCC_Leader_1_1250"))
((= e 1)(setq b "CCC_1_1000_Dims")(setq c "CCC_Leader_1_1000"))
((= e 2)(setq b "CCC_1_500_Dims")(setq c "CCC_Leader_1_500"))
((= e 4)(setq b "CCC_1_250_Dims")(setq c "CCC_Leader_1_250"))
((= e 5)(setq b "CCC_1_200_Dims")(setq c "CCC_Leader_1_200"))
((= e (setq b "CCC_1_125_Dims")(setq c "CCC_Leader_1_125"))
((= e 10)(setq b "CCC_1_100_Dims")(setq c "CCC_Leader_1_100"))
((= e 20)(setq b "CCC_1_50_Dims")(setq c "CCC_Leader_1_50"))
((= e 40)(setq b "CCC_1_25_Dims")(setq c "CCC_Leader_1_25"))
((= e 50)(setq b "CCC_1_20_Dims")(setq c "CCC_Leader_1_20"))
((= e 100)(setq b "CCC_1_10_Dims")(setq c "CCC_Leader_1_10"))
)
(command "_.dimstyle" "r" b)
(princ)
)
我不太明白你想做什么,但是:
(defun c:db-vps (/ cv ss en ed ys vs)
(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 "_.MSPACE")
(setvar "CVPORT" cv)
(setq vs (getvar "VIEWSIZE"))
(princ (strcat "\nThe VIEWPORT Scale is 1 = " (rtos (/ vs ys) 2 4)))
(princ (strcat "\nThe VIEWPORT Scale is " (rtos (/ ys vs) 2 8) " = 1")))
(alert "\nYour Are Not In An Active MODELSPACE Viewport"))
(prin1))
(/dxf40 dxf41)仅提供视口的x与y比例。没什么用。
如果要使用比较,则需要将(equal)与fuzz一起使用-大卫
我也不确定你到底在做什么。我知道你没有像以前那样犯那个论点错误。该程序正在寻找一些我认为是你没有提供的dimstyle,所以进一步检查是有限的。
页:
[1]
2