woodman78 发表于 2022-7-6 07:02:17

获取viewp范围的坐标

我有一个布局,我们使用的土地地图为我们的测绘局。我需要指出视口范围的坐标,但坐标需要来自模型空间。
我在考虑编写一个lisp,在视口上绘制一个矩形,用矩形创建一个选择集,将其移动到“模型”选项卡,然后查询角点的坐标并将其输入到字段中。
然后,如果视图被更改,例程将删除带有矩形的层,并再次启动该过程。
 
这条路过顶了吗?还有别的方法吗?
 
谢谢

Lee Mac 发表于 2022-7-6 07:14:05

尝试以下快速程序:
 

(defun c:vprec ( / _text l j k p )
   (defun _text ( s p r j )
       (entmake
         (list
            '(0 . "TEXT")
               (cons 410 (getvar 'ctab))
               (cons 040 (getvar 'textsize))
               (cons 007 (getvar 'textstyle))
               (cons 010 p)
               (cons 011 p)
               (cons 001 s)
               (cons 050 r)
               (cons 072 j)
            '(73 . 2)
         )
       )
   )
   (cond
       (   (= 1 (getvar 'tilemode))
         (princ "\nCommand only available in Paperspace.")
       )
       (   (= 1 (getvar 'cvport))
         (princ "\nPlease activate a viewport.")
       )
       (   (setq l(cdr (assoc (getvar 'cvport) (vports)))
               j '(2 0 2 0)
               k '(2 0 0 2)
         )
         (foreach x (list (car l) (cadr l) (list (caadr l) (cadar l)) (list (caar l) (cadadr l)))
               (setq p (mapcar 'rtos (trans (trans x 3 2) 2 0)))
               (_text (strcat "E:" (carp)) x (/ pi 2.0) (car j))
               (_text (strcat "N:" (cadr p)) x    0.0   (car k))
               (setq j (cdr j)
                     k (cdr k)
               )
         )
       )
   )
   (princ)
)

woodman78 发表于 2022-7-6 07:21:18

谢谢李·麦克。这太棒了。但有两个问题。
首先,如果我多次运行它,它会覆盖第一个文本。
第二个是文本高度。我曾尝试为此创建一个文本样式,并将其中的高度设置为5,但即使新样式设置为当前样式,文本仍以2.5的速度输入。我错过了什么?
 
再次感谢。。。

woodman78 发表于 2022-7-6 07:35:22

李·麦克,
刚刚找到文字高度问题的解决方案。
谢谢

Lee Mac 发表于 2022-7-6 07:44:45

 
当然,它只是创建文本。
 
 
文字高度来自TEXTSIZE系统变量。

woodman78 发表于 2022-7-6 07:46:27

谢谢李,我得到了文本高度和覆盖问题排序。还有一件事我忘了问,那就是如何将数字限制为不带小数点的整数。。
http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/Rounding-Text-to-Less-Decimal-Places/td-p/2510232
根据这个链接,您的程序中的设置似乎设置为0,但它仍然提供4位小数。。。。我看错了吗?

Lee Mac 发表于 2022-7-6 07:55:02

 
当前程序使用LUNITS和LUPREC的设置,因为调用rtos时没有单位或精度参数。
要包含这些参数,请更改:
 
(setq p (mapcar 'rtos (trans (trans x 3 2) 2 0)))至:
我强调了单位和精度参数。

woodman78 发表于 2022-7-6 08:09:54

谢谢LeeMac,
这就是我最后得到的。。
 
3
 
我知道我添加的内容很粗糙。。。。但它们似乎确实有效。
页: [1]
查看完整版本: 获取viewp范围的坐标