明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6450|回复: 5

如何获取视口角点在模型中的坐标?

[复制链接]
发表于 2012-7-16 09:56 | 显示全部楼层 |阅读模式
布局中,我建立了一个矩形视口,
怎样知道视口角点对应在模型中的点在模型中的坐标呢?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-7-16 12:03 | 显示全部楼层
系统变量里面好像有个VSMIN虚屏,也想知道和视口有什么关系?
 楼主| 发表于 2012-7-16 13:11 | 显示全部楼层
貌似不对啊,VSMIN是整个模型的吧,不是局部区域的
发表于 2012-7-16 17:01 | 显示全部楼层
参阅 trans 函数的用法!
发表于 2012-7-16 17:09 | 显示全部楼层
本帖最后由 e2002 于 2022-3-11 10:43 编辑

  1. ;;; https://jtbworld.com/autocad-vp-outline-lsp

  2. ;;; vp-outline.lsp
  3. ;;;
  4. ;;; Creates a polyline in modelspace that
  5. ;;; has the outline of the selected viewport.
  6. ;;; Supports clipped viewports. polyline is supported
  7. ;;; ellipse, spline, region and circle not supported at this point
  8. ;;; If vp-outline is called when in mspace it detects
  9. ;;; the active viewport.
  10. ;;;
  11. ;;; c:vp-outline
  12. ;;;
  13. ;;; By Jimmy Bergmark
  14. ;;; Copyright (C) 1997-2013 JTB World, All Rights Reserved
  15. ;;; Website: www.jtbworld.com
  16. ;;; E-mail: info@jtbworld.com
  17. ;;;
  18. ;;; 2000-04-10
  19. ;;; 2003-11-19 Added support for drawing the outline in other ucs/view than world/current
  20. ;;;
  21. ;;; 2006-04-06 Added support for twisted views Tom Beauford
  22. ;;; 2013-06-08 Added support for circular viewports
  23. ;;;
  24. ;;; Should work on AutoCAD 2000 and newer
  25. (vl-load-com)

  26. (defun dxf (n ed) (cdr (assoc n ed)))

  27. (defun axist->VariantArray (lst)
  28.   (vlax-Make-Variant
  29.     (vlax-SafeArray-Fill
  30.       (vlax-Make-SafeArray
  31.   vlax-vbDouble
  32.   (cons 0 (- (length lst) 1))
  33.       )
  34.       lst
  35.     )
  36.   )
  37. )

  38. (defun c:vp-outline (/ ad ss ent pl plist xy n vpbl vpur msbl msur ven vpno ok
  39.          circ)
  40.   (setq ad (vla-get-activedocument (vlax-get-acad-object)))
  41.   (if (= (getvar "tilemode") 0)
  42.     (progn
  43.       (if (= (getvar "cvport") 1)
  44.   (progn
  45.     (if (setq ss (ssget ":E:S" '((0 . "VIEWPORT"))))
  46.       (progn (setq ent (ssname ss 0))
  47.        (setq vpno (dxf 69 (entget ent)))
  48.        (vla-Display (vlax-ename->vla-object ent) :vlax-true)
  49.        (vla-put-mspace ad :vlax-true) ; equal (command "._mspace")
  50. ; this to ensure trans later is working on correct viewport
  51.        (setvar "cvport" vpno)
  52. ;              (vla-put-mspace ad :vlax-false) ; equal (command "._pspace")
  53.        (setq ok T)
  54.        (setq ss nil)
  55.       )
  56.     )
  57.   )
  58.   (setq ent (vlax-vla-object->ename (vla-get-activepviewport ad))
  59.         ok  T
  60.   )
  61.       )
  62.       (if ok
  63.   (progn (setq circle nil)
  64.          (setq ven (vlax-ename->vla-object ent))
  65.          (if (/= 1 (logand 1 (dxf 90 (entget ent)))) ; detect perspective
  66.      (progn  (if (= (vla-get-clipped ven) :vlax-false)
  67.         (progn ; not clipped
  68.           (vla-getboundingbox ven 'vpbl 'vpur)
  69.           (setq vpbl  (trans (vlax-safearray->list vpbl) 3 2)
  70.           msbl  (trans vpbl 2 1)
  71.           msbl  (trans msbl 1 0)
  72.           vpur  (trans (vlax-safearray->list vpur) 3 2)
  73.           msur  (trans vpur 2 1)
  74.           msur  (trans msur 1 0)
  75.           vpbr  (list (car vpur) (cadr vpbl) 0)
  76.           msbr  (trans vpbr 2 1)
  77.           msbr  (trans msbr 1 0)
  78.           vpul  (list (car vpbl) (cadr vpur) 0)
  79.           msul  (trans vpul 2 1)
  80.           msul  (trans msul 1 0)
  81.           plist  (list (car msbl)
  82.                 (cadr msbl)
  83.                 (car msbr)
  84.                 (cadr msbr)
  85.                 (car msur)
  86.                 (cadr msur)
  87.                 (car msul)
  88.                 (cadr msul)
  89.           )
  90.           )
  91.         )
  92.         (progn ; clipped
  93.           (setq pl (entget (dxf 340 (entget ent))))
  94.           (if  (= (dxf 0 pl) "CIRCLE")
  95.             (setq circle T)
  96.             (progn (setq plist (vla-get-coordinates
  97.                (vlax-ename->vla-object (dxf -1 pl))
  98.              )
  99.              plist (vlax-safearray->list (vlax-variant-value plist))
  100.              n   0
  101.              pl   nil
  102.              )
  103.              (repeat (/ (length plist) 2)
  104.                (setq xy  (trans (list (nth n plist) (nth (1+ n) plist)) 3 2)
  105.                xy  (trans xy 2 1)
  106.                xy  (trans xy 1 0)
  107.                pl  (cons (car xy) pl)
  108.                pl  (cons (cadr xy) pl)
  109.                n  (+ n 2)
  110.                )
  111.              )
  112.              (setq plist (reverse pl))
  113.             )
  114.           )
  115.         )
  116.       )
  117.       (if circle
  118.         (vla-AddCircle
  119.           (vla-get-ModelSpace ad)
  120.           (axist->VariantArray
  121.             (trans (trans (trans (dxf 10 pl) 1 0) 2 1) 3 2)
  122.           )
  123.           (/ (dxf 40 pl) (caddr (trans '(0 0 1) 2 3)))
  124.         )
  125.         (vla-Put-Closed
  126.           (vla-AddLightWeightPolyline
  127.             (vla-get-ModelSpace ad)
  128.             (axist->VariantArray plist)
  129.           )
  130.           :vlax-True
  131.         )
  132.       )
  133.      )
  134.          )
  135.   )
  136.       )
  137.     )
  138.   )
  139.   (if ss
  140.     (vla-put-mspace ad :vlax-false)
  141.   ) ; equal (command "._pspace"))
  142.   (princ)
  143. )

 楼主| 发表于 2012-7-16 19:21 | 显示全部楼层
e2002 发表于 2012-7-16 17:09

十分感谢各位大侠的帮助,我在琢磨下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 13:09 , Processed in 0.276172 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表