找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 800|回复: 0

[转贴]:vp-outline

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-12 21:07:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. ;;; vp-outline.lsp
  2. ;;;
  3. ;;; Creates a polyline in modelspace that
  4. ;;; has the outline of the selected viewport.
  5. ;;; Supports clipped viewports.
  6. ;;; If vp-outline is called when in mspace it detects
  7. ;;; the active viewport.
  8. ;;;
  9. ;;; c:vp-outline
  10. ;;;
  11. ;;; By Jimmy Bergmark
  12. ;;; Copyright (C) 1997-2005 JTB World, All Rights Reserved
  13. ;;; Website: [url]www.jtbworld.com[/url]
  14. ;;; E-mail: [email]info@jtbworld.com[/email]
  15. ;;;
  16. ;;; 2000-04-10
  17. ;;; 2003-11-19 Added support for drawing the outline in other ucs/view than world/current
  18. ;;;
  19. ;;; Tested on AutoCAD 2000, 2000i, 2002, 2004


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

  21. (defun ax:List->VariantArray (lst)
  22.   (vlax-Make-Variant
  23.     (vlax-SafeArray-Fill
  24.       (vlax-Make-SafeArray
  25.         vlax-vbDouble
  26.         (cons 0 (- (length lst) 1))
  27.       )
  28.       lst
  29.     )
  30.   )
  31. )

  32. (defun c:vp-outline (/ ad ss ent pl plist xy n vpbl vpur msbl msur ven vpno ok)
  33.   (setq ad (vla-get-activedocument (vlax-get-acad-object)))
  34.   (if (= (getvar "tilemode") 0)
  35.     (progn
  36.       (if (= (getvar "cvport") 1)

  37.         (progn
  38.           (if (setq ss (ssget ":E:S" '((0 . "VIEWPORT"))))
  39.             (progn
  40.               (setq ent (ssname ss 0))
  41.               (setq vpno (dxf 69 (entget ent)))
  42.               (vla-Display (vlax-ename->vla-object ent) :vlax-true)
  43.               (vla-put-mspace ad :vlax-true) ; equal (command "._mspace")
  44.               ; this to ensure trans later is working on correct viewport
  45.               (setvar "cvport" vpno)
  46.               (vla-put-mspace ad :vlax-false) ; equal (command "._pspace")
  47.               (setq ok T)
  48.             )
  49.           )
  50.         )
  51.         (setq ent (vlax-vla-object->ename (vla-get-activepviewport ad))
  52.               ok  T
  53.         )
  54.       )
  55.       (if ok
  56.         (progn
  57.           (setq ven (vlax-ename->vla-object ent))
  58.           (if (/= 1 (logand 1 (dxf 90 (entget ent)))) ; detect perspective
  59.             (if (= (vla-get-clipped ven) :vlax-false)
  60.                (progn                 ; not clipped
  61.                  (vla-getboundingbox ven 'vpbl 'vpur)
  62.                  (setq msbl  (trans (vlax-safearray->list vpbl) 3 2)
  63.                        msbl  (trans msbl 2 1)
  64.                        msbl  (trans msbl 1 0)
  65.                        msur  (trans (vlax-safearray->list vpur) 3 2)
  66.                        msur  (trans msur 2 1)
  67.                        msur  (trans msur 1 0)
  68.                        plist (list (car msbl) (cadr msbl)
  69.                                    (car msur) (cadr msbl)
  70.                                    (car msur) (cadr msur)
  71.                                    (car msbl) (cadr msur)
  72.                              )
  73.                  )
  74.                )
  75.                (progn                 ; clipped
  76.                  (setq pl    (entget (dxf 340 (entget ent)))
  77.                        plist (vla-get-coordinates
  78.                                (vlax-ename->vla-object (dxf -1 pl))
  79.                              )
  80.                        plist (vlax-safearray->list (vlax-variant-value plist))
  81.                        n     0
  82.                        pl    nil
  83.                  )
  84.                  (repeat (/ (length plist) 2)
  85.                    (setq xy (trans (list (nth n plist) (nth (1+ n) plist)) 3 2)
  86.                          xy  (trans xy 2 1)
  87.                          xy  (trans xy 1 0)
  88.                          pl (cons (car xy) pl)
  89.                          pl (cons (cadr xy) pl)
  90.                          n  (+ n 2)
  91.                    )
  92.                  )
  93.                  (setq plist (reverse pl))
  94.                )
  95.             )
  96.           )
  97.           (setq plist (ax:List->VariantArray plist))
  98.           (vla-Put-Closed
  99.             (vla-AddLightWeightPolyline
  100.               (vla-get-ModelSpace ad)
  101.               plist
  102.             )
  103.             :vlax-True
  104.           )
  105.         )
  106.       )
  107.     )
  108.   )
  109.   (princ)
  110. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 01:08 , Processed in 0.309149 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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