明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1935|回复: 1

对一组选中的数字标记其中的最大值和最小值框选改为多边形内

[复制链接]
发表于 2011-9-22 12:37:05 | 显示全部楼层 |阅读模式
如何将下面程序的框选功能修改为多边形内
原帖:对一组选中的数字标记其中的最大值和最小值
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=81904&highlight=%D7%EE%B4%F3%D6%B5
原帖代码:

;; Qiu Feng, 2010-05-06
;; 此程序用于标记一组整数中的最大值和最小值。
;; 命令:MarkMinMax
(vl-load-com)
;; 全局变量
(setq *MarkMinMax_doc* (vla-get-activedocument (vlax-get-acad-object)))
(setq *MarkMinMax_sysvar* nil)
(defun MarkMinMax_savevar (varlist / var)
  (setq *MarkMinMax_sysvar* nil)
  (foreach var varlist
    (setq *MarkMinMax_sysvar*
    (cons (cons var (getvar var))
   *MarkMinMax_sysvar*
    )
    )
  )
)
(defun MarkMinMax_resvar (/ var)
  (foreach var *MarkMinMax_sysvar*
    (if (getvar (car var))
      ;; 保证这个版本中存在这种系统变量
      (setvar (car var) (cdr var))
    )
  )
  (setq *MarkMinMax_sysvar* nil)
)
(defun c:MarkMinMax ()
  (vla-startundomark *MarkMinMax_doc*)
  (MarkMinMax_savevar '("cmdecho" "osmode"))
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (vl-catch-all-apply 'MarkMinMax nil)
  (MarkMinMax_resvar)
  (vla-endundomark *MarkMinMax_doc*)
  (princ)
)
(defun MarkMinMax (/ ss sslist mi ma std-sslist SelectNumbericText)
  ;; Selection Set => ordered list of entities
  (defun STD-SSLIST (ss / n lst)
    (if (eq 'PICKSET (type ss))
      (repeat (setq n (fix (sslength ss))) ; fixed
(setq lst (cons (ssname ss (setq n (1- n))) lst))
      )
    )
  )
  ;; 选择数字
  (defun SelectNumbericText (/ ss regexp sslist e)
    (setq regexp (vlax-create-object "Vbscript.RegExp"))
    (if (null regexp)
      (progn
(princ "\n正则表达式引擎初始化失败。")
(exit)
      )
    )
    (setq ss (ssget '((0 . "*TEXT"))))
    (setq sslist (std-sslist ss))
    (vlax-put-property regexp "IgnoreCase" :vlax-true) ;忽略大小写
    (vlax-put-property regexp "Global" :vlax-true)
     ;匹配方式,全文字匹配
    (vlax-put-property
      regexp
      "Pattern"
      "^[-+]?[0-9]*\\.?[0-9]+\\b$"
    )
    (foreach e sslist
      (if (= :vlax-false
      (vlax-invoke-method
        regexp
        "Test"
        (cdr (assoc 1 (entget e)))
      )
   )
(ssdel e ss)
      )
    )
    ss
  )
  ;; textbox
  (defun marktextbox (n color / nlist entlist boxlist box ptlist)
    (vl-cmdf "select" ss "")
    (setq
      nlist (std-sslist (ssget "P" (list '(0 . "*TEXT") (cons 1 n))))
    )
    (setq entlist (mapcar 'entget nlist))
    (setq boxlist (mapcar 'textbox entlist))
    (setq ptlist (mapcar '(lambda (ent) (cdr (assoc 10 ent))) entlist))
    (setq
      ptlist (mapcar '(lambda (pt) (list (car pt) (cadr pt))) ptlist)
    )
    (setq
      boxlist (mapcar '(lambda (box p)
    (mapcar '(lambda (p1)
        (mapcar '+ p1 p)
      )
     box
    )
         )
        boxlist
        ptlist
       )
    )
    (foreach box boxlist
      (vl-cmdf "rectang")
      (apply 'vl-cmdf box)
      (vl-cmdf "chprop" (entlast) "" "color" color "")
    )
  )
  ;; ----------
  ;; main
  ;; ----------
  (setq ss (SelectNumbericText))
  (setq sslist (std-sslist ss))
  (setq sslist
  (vl-sort sslist
    (function (lambda (e1 e2)
         (< (distof (cdr (assoc 1 (entget e1))))
     (distof (cdr (assoc 1 (entget e2))))
         )
       )
    )
  )
  )
  (setq mi (cdr (assoc 1 (entget (car sslist)))))
  (setq ma (cdr (assoc 1 (entget (last sslist)))))
  ;; 红色标记最小值
  (marktextbox mi 1)
  ;; 绿色标记最大值
  (marktextbox ma 3)
  (princ)
)

发表于 2011-9-22 16:06:22 | 显示全部楼层

  1. ;; 需要e派工具箱(XCAD)的支持:[url=http://xyp1964.ys168.com]http://xyp1964.ys168.com[/url]
  2. (defun c:tt ()
  3.   (CMDLA0)
  4.   (if (setq p1 (getpoint "\n基点<退出>: "))
  5.     (progn
  6.       (command "pline" p1)
  7.       (while (setq p2 (getpoint p1 "\n基点<退出>: "))
  8. (command p2)
  9. (setq p1 p2
  10. )
  11.       )
  12.       (command "c")
  13.       (setq s1 (entlast)
  14.      ptn (xyp-get-Vertexs s1 0)
  15.       )
  16.       (xyp-erase s1)
  17.     )
  18.   )
  19.   (if (setq ss (ssget "WP" ptn '((0 . "TEXT") (1 . "~*[~`--9]*"))))
  20.     (progn
  21.       (setq lst (xyp-Sort ss 1 "none")
  22.      s1 (cdar lst)
  23.      s2 (cdr (last lst))
  24.       )
  25.       (xyp-circle
  26. (xyp-get-MinMaxPoint s1 5)
  27. (xyp-get-dxf 40 s1)
  28.       )
  29.       (xyp-circle
  30. (xyp-get-MinMaxPoint s2 5)
  31. (xyp-get-dxf 40 s2)
  32.       )
  33.     )
  34.   )
  35.   (CMDLA1)
  36. )

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-7-25 04:52 , Processed in 0.165968 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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