prodromosm 发表于 2022-7-5 19:44:03

布局纸张区域?

你好我想问一下,是否有人有lisp来计算布局打印纸的面积。
 
谢谢

tombu 发表于 2022-7-5 19:51:13

这对我很有效:http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/how-to-get-real-printable-size-per-layout-via-lisp/td-p/5527568

prodromosm 发表于 2022-7-5 19:54:54

嗨,汤姆布,谢谢你的回复。这个lisp给了我每个布局的尺寸,我想要一个lisp来计算当前布局的面积。
 
谢谢

prodromosm 发表于 2022-7-5 19:57:12

还有其他想法吗?

BIGAL 发表于 2022-7-5 20:05:27

extmin extmax

prodromosm 发表于 2022-7-5 20:08:47

嗨,比格尔。我需要计算当前布局的打印成本。
第一个lisp代码为我提供了所有布局的尺寸。这个lisp计算最后一个布局的成本。有人可以更改它来计算当前布局的成本吗?
 

(defun c:test (/ lo wdt lg plotarea)
(vl-load-com)
(vlax-for lo (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
   (vla-getpapersize lo 'wdt 'lg)
   (setq plotarea (list wdt lg))
      (princ "\n")
   (princ (vla-get-name lo))
   (princ "\n\t\tPlot size - ")
(princ
   (if
       (zerop (rem (vla-get-plotrotation lo) 2))
       plotarea
   )
   )
)
(setq area (/( * wdt lg) 1000000))
(setq pr (cond ((getreal"\n The print cost €/sq.m (π.χ 2.30 €/sq.m monochromeή 3.50 €/sq.m color) : "))(2.30)))
(setq cost (* pr area))
(setq sx (cond ((getreal"\n Give the number of copies (example 3) : "))(3)))
(setq scost (* sx cost))
(textscr)
(princ (strcat
                  "\n Calculations"
                  "\n --------------------------------------------------------------------------"                  
                   "\n dimension x = "
                  (rtos wdt 2 2)
                  " m"
                  "\n dimension y = "
                  (rtos lg 2 2)
                  " m"
                  "\n Area of the print paper = "
                  (rtos area 2 2)
                  " sq.m"
                  "\n Cost per drawing = "
                  (rtos cost 2 2)
                  " €"
                  "\n Total Cost of Printing = "
                  (rtos scost 2 2)
                  " €"
            )
   )

(princ)
)


 
 
谢谢

prodromosm 发表于 2022-7-5 20:11:54

我更新了代码,但仍然有同样的问题。此lisp计算最后一个布局的成本

hmsilva 发表于 2022-7-5 20:17:59

尝试此修订代码。。。
 
(defun c:test (/ lo wdt lg plotarea)
(vl-load-com)
;(vlax-for lo (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
(setq lo (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) (getvar 'CTAB)))
   (vla-getpapersize lo 'wdt 'lg)
   (setq plotarea (list wdt lg))
      (princ "\n")
   (princ (vla-get-name lo))
   (princ "\n\t\tPlot size - ")
(princ
   (if
       (zerop (rem (vla-get-plotrotation lo) 2))
       plotarea
       (reverse plotarea); <<<<
   )
   )

(setq area (/( * wdt lg) 1000000))
(setq pr (cond ((getreal"\n The print cost €/sq.m (p.? 2.30 €/sq.m monochrome? 3.50 €/sq.m color) : "))(2.30)))
(setq cost (* pr area))
(setq sx (cond ((getreal"\n Give the number of copies (example 3) : "))(3)))
(setq scost (* sx cost))
(textscr)
(princ (strcat
                  "\n Calculations"
                  "\n --------------------------------------------------------------------------"                  
                   "\n dimension x = "
                  (rtos wdt 2 2)
                  " m"
                  "\n dimension y = "
                  (rtos lg 2 2)
                  " m"
                  "\n Area of the print paper = "
                  (rtos area 2 2)
                  " sq.m"
                  "\n Cost per drawing = "
                  (rtos cost 2 2)
                  " €"
                  "\n Total Cost of Printing = "
                  (rtos scost 2 2)
                  " €"
            )
   )

(princ)
)
可能成为:
(setq lo (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) (getvar 'CTAB)))

Lee Mac 发表于 2022-7-5 20:18:57

谢谢大家的帮助

prodromosm 发表于 2022-7-5 20:24:05

也许代码可以缩短为:
(setq lo (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
页: [1] 2
查看完整版本: 布局纸张区域?