乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 57|回复: 11

[编程交流] 如何突出封闭区域

[复制链接]

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:17:26 | 显示全部楼层 |阅读模式
我正在为一个选择集制作一个点列表,为了识别由它们包围的那些对象,我用这些点之间连接的GRVEC表示。现在,我想知道是否有一种方法可以在选择这些点时突出显示由这些点包围的区域(以WP或CP在选择时工作的方式)。
它不必使用向量,任何已知的方法(如果存在)都是受欢迎的:)
 
提前感谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:25:43 | 显示全部楼层
我很想看看是否有人提供了一种方法来实现这一点-我个人想不出一种通过LISP的方法(当然,如果不使用穿过区域的向量,但这不会是半透明的)。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:33:46 | 显示全部楼层
我认为我不太明白整个意思。
 
这应该突出显示完全在(窗口)选择区域内的实体
 
我认为穿越会有点混乱。
 
  1. [b][color=BLACK]([/color][/b]defun c:sel-hl [b][color=FUCHSIA]([/color][/b]/ pt1 pt2 pl wl tl gl i ss en[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]setq pt1 [b][color=NAVY]([/color][/b]getpoint [color=#2f4f4f]"\nStart Point:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  4. [b][color=FUCHSIA]([/color][/b]setq pl [b][color=NAVY]([/color][/b]list pt1[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  5. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq pt2 [b][color=MAROON]([/color][/b]getpoint pt1 [color=#2f4f4f]"\nNext Point:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  6.         [b][color=NAVY]([/color][/b]setq pl [b][color=MAROON]([/color][/b]cons pt2 pl[b][color=MAROON])[/color][/b]
  7.              pt1 pt2
  8.               wl [b][color=MAROON]([/color][/b]cons [b][color=GREEN]([/color][/b]last pl[b][color=GREEN])[/color][/b] pl[b][color=MAROON])[/color][/b]
  9.               tl wl
  10.               gl '[b][color=MAROON]([/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  11.         [b][color=NAVY]([/color][/b]repeat [b][color=MAROON]([/color][/b]length pl[b][color=MAROON])[/color][/b]
  12.             [b][color=MAROON]([/color][/b]setq gl [b][color=GREEN]([/color][/b]append gl [b][color=BLUE]([/color][/b]list 2 [b][color=RED]([/color][/b]car tl[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cadr tl[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  13.                   tl [b][color=GREEN]([/color][/b]cdr tl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  14.         [b][color=NAVY]([/color][/b]redraw[b][color=NAVY])[/color][/b]
  15.         [b][color=NAVY]([/color][/b]apply 'grvecs [b][color=MAROON]([/color][/b]list gl[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  16.         [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]setq i -1 ss [b][color=GREEN]([/color][/b]ssget [color=#2f4f4f]"_WP"[/color] wl[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  17.              [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]setq en [b][color=BLUE]([/color][/b]ssname ss [b][color=RED]([/color][/b]setq i [b][color=PURPLE]([/color][/b]1+ i[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  18.                     [b][color=GREEN]([/color][/b]redraw en 3[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  19. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
或者您正在尝试对选择区域进行着色?同样,窗口和交叉将产生两种看起来非常不同的解决方案-大卫
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:37:18 | 显示全部楼层
(重画)在不同版本上的效果不同。您可能需要强制重新生成或使用(重画en 1)再次跨过集合以取消突出显示内容-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:43:02 | 显示全部楼层
David I可能错了,但我认为Aleksa指的是在对象上打开窗口时的半透明着色:
 
夸张的例子:
 
111726xtffbph4czd9e21q.png
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:49:31 | 显示全部楼层
谢谢你的回复。
李,你完全理解我。大卫很抱歉,如果我不清楚我想达到什么目的,但英语不是我的母语,所以我没有想到像半透明阴影这样明显的方式来解释它。无论如何,你已经为我解决了一个进退两难的问题。
非常感谢!!!!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:51:32 | 显示全部楼层
正如我所说,对于向量,但不是半透明的:
 
 
  1. ;;------------------=={ Shaded SelectionSet  }==--------------;;
  2. ;;                                                            ;;
  3. ;;  Provides a UCS oriented window/crossing selection set     ;;
  4. ;;  interface, with shading visual effect.                    ;;
  5. ;;------------------------------------------------------------;;
  6. ;;  Author: Lee McDonnell, 2010                               ;;
  7. ;;                                                            ;;
  8. ;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
  9. ;;  Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
  10. ;;------------------------------------------------------------;;
  11. ;;  Arguments:                                                ;;
  12. ;;  str    - prompt string                                    ;;
  13. ;;  p1     - base point for window (UCS)                      ;;
  14. ;;  filter - optional selection set filter                    ;;
  15. ;;------------------------------------------------------------;;
  16. ;;  Returns:  SelectionSet of selected objects, else nil      ;;
  17. ;;------------------------------------------------------------;;
  18. (defun LM:GrSelectionSetShaded ( str p1 filter / gr p1 pt1 pt2 vsr hgt wid s1 s2 c1 c2 pi/2 lst )
  19. ;; © Lee Mac 2010
  20. (princ str)
  21. (while (and (= 5 (car (setq gr (grread t 13 1)))) (listp (setq p3 (cadr gr))))
  22.    (redraw)
  23.    (setq vsr  (/ (getvar 'VIEWSIZE) (cadr (getvar 'SCREENSIZE)))
  24.          p2   (list (car p3) (cadr p1) (caddr p3))
  25.          p4   (list (car p1) (cadr p3) (caddr p3))
  26.          hgt  (- (cadr p3) (cadr p1))
  27.          wid  (- (car  p3) (car  p1))         
  28.          s1   (if (minusp wid)  -1.  1.) s2 (if (minusp hgt)  -1.  1.)
  29.          c1   (if (minusp wid) -256 256) c2 (if (minusp wid)  106 156) pi/2 (/ pi 2.) i 0
  30.          hgt  (- hgt (* vsr 2. s2))
  31.    )
  32.    (grvecs (setq lst (list c1 p1 p2 p1 p4 p2 p3 p4 p3)))
  33.    (repeat (1- (fix (/ (abs wid) vsr)))
  34.      (grdraw (setq p5 (polar (polar p1 0. (* s1 (setq i (1+ i)) vsr)) pi/2 (* s2 vsr))) (polar p5 pi/2 hgt) c2)
  35.    )  
  36. )
  37. (redraw)
  38. (ssget (if (minusp (car lst)) "_C" "_W") p1 p3 filter)
  39. )
  40. ;; Test Function
  41. (defun c:test ( / p )
  42. (if (setq p (getpoint "\nClick!: "))
  43.    (sssetfirst nil (LM:GrSelectionSetShaded "\nCorner..." p nil))
  44. )
  45. (princ)
  46. )
(测试类型)
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:00:52 | 显示全部楼层
谢谢李的回复。正如你已经知道的那样,这不是我想要的,但我很想看看你是如何将选择窗口着色的。所以我无意中学到了一些新东西:)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:01:39 | 显示全部楼层
没错,我知道我们可以实现半透明,但我对向量解很好奇
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:08:44 | 显示全部楼层
我看到了这一点,从来没有机会发表回应(和孩子们一起度过的疯狂周末)。由于这都是学术性的,这里有一个非常快速和粗糙的方法(使用窗口形状)。
这没有实际用途,因此没有解释非WCS,并且写得很糟糕(摘自我不久前发布的一个grread getcorner示例)。
顺便说一句,李干得好。
 
  1. (defun c:Test (/)
  2. (sssetfirst nil (_GrSelectionSetShaded (getpoint "\nSpecify first corner: ") '((0 . "LINE"))))
  3. (princ)
  4. )
  5. (defun _GrSelectionSetShaded (pt flt / *error* _solid foo space sort gr solid opt ss)
  6. ;; Alan J. Thomspon, 10.18.10
  7. (defun *error* (m) (redraw) (and solid (setq solid (vla-delete solid))))
  8. (or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  9. (setq space (if (or (eq acmodelspace (vla-get-activespace *AcadDoc*))
  10.                      (eq :vlax-true (vla-get-mspace *AcadDoc*))
  11.                  )
  12.                (vla-get-modelspace *AcadDoc*)
  13.                (vla-get-paperspace *AcadDoc*)
  14.              )
  15. )
  16. (setq sort (vla-AddObject (vla-GetExtensionDictionary space) "ACAD_SORTENTS" "AcDbSortentsTable"))
  17. (defun _solid (a b c d color)
  18.    (and solid (setq solid (vla-delete solid)))
  19.    (vl-catch-all-apply
  20.      (function
  21.        (lambda (/)
  22.          (vlax-invoke
  23.            sort
  24.            'MoveToBottom
  25.            (list (setq solid (vlax-ename->vla-object
  26.                                (entmakex (list '(0 . "SOLID")
  27.                                                '(100 . "AcDbTrace")
  28.                                                (cons 62 color)
  29.                                                (cons 10 a)
  30.                                                (cons 11 b)
  31.                                                (cons 12 d)
  32.                                                (cons 13 c)
  33.                                          )
  34.                                )
  35.                              )
  36.                  )
  37.            )
  38.          )
  39.        )
  40.      )
  41.    )
  42. )
  43. (defun foo (p1 p2)
  44.    (redraw)
  45.    (if (apply 'and (mapcar 'vl-consp (list p1 p2)))
  46.      ((lambda (l d)
  47.         (apply '_solid
  48.                (reverse (cons (setq opt (if (zerop d)
  49.                                           (getvar 'windowareacolor)
  50.                                           (getvar 'crossingareacolor)
  51.                                         )
  52.                               )
  53.                               (cdr (reverse l))
  54.                         )
  55.                )
  56.         )
  57.         (mapcar '(lambda (a b) (and a b (grdraw a b 7 d))) l (append (cdr l) (list (last l))))
  58.       )
  59.        (list p1 (list (car p2) (cadr p1)) p2 (list (car p1) (cadr p2)) p1)
  60.        (cond ((> (car p1) (car p2)) 1)
  61.              (0)
  62.        )
  63.      )
  64.    )
  65. )
  66. (if (vl-consp pt)
  67.    (progn (princ "\rSpecify opposite corner: ")
  68.           (while (eq 5 (car (setq gr (grread T 15 1)))) (foo pt (cadr gr)))
  69.           (redraw)
  70.           (cond ((eq 3 (car gr))
  71.                  (setq ss (ssget (if (eq opt (getvar 'windowareacolor))
  72.                                    "_W"
  73.                                    "_C"
  74.                                  )
  75.                                  pt
  76.                                  (cadr gr)
  77.                                  flt
  78.                           )
  79.                  )
  80.                 )
  81.           )
  82.    )
  83. )
  84. (*error* nil)
  85. ss
  86. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 17:33 , Processed in 1.091013 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表