找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 125|回复: 0

[原创] 各种线转多段线、面域

[复制链接]

已领礼包: 195个

财富等级: 日进斗金

发表于 7 天前 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 zdqwy19 于 2026-9-2 07:31 编辑

创建边界.支持LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,MLINE,CIRCLE,ELLIPSE,HELIX;注意线重叠无效。各种线遵循原先线型,不作更改。

各种线转多段线、面域.gif
;;;显示边界线.
(defun zdqwy19xianshibianjiexian(/ e o s u p1 i l1 l2 ss _hit-test)
  (defun _hit-test ( pt lst )
    (vl-some
      (function
  (lambda ( obj / row col )
    (if(eq :vlax-true (vla-hittest obj (vlax-3D-point (trans pt 1 0)) (vlax-3D-point (trans (getvar 'VIEWDIR) 1 0)) 'row 'col))
      (list obj row col))))
      lst))
  (prompt "显示边界线.")
  (setq o (getvar 'cmdecho) u (getvar 'nomutt) i (getvar 'osmode))
  (setvar 'cmdecho 0)
  (setvar 'osmode 0)
  (setq ss (ssget "_X" (list (cons 0 "ACAD_TABLE") (cons 410 (getvar 'CTAB)))))
  (if(not ss)
    (progn
      (setq ss nil)
      (setvar 'osmode i)
      (setvar 'cmdecho o)
      (vl-exit-with-error (princ "不存在表格对象."))))
  (setq ss (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))));(setq ss (_ss->lst ss))
  (mapcar '(lambda(x)(vla-ClearSubSelection x)) ss)
  (setq p1 (getpoint "选择表格内文字:"))
  (setvar 'nomutt 1)
  (while p1;e
    (setq s (apply 'ssget (cons "C" ((lambda(x a b)(list (trans (list (- (car x)  a) (- (cadr x) b) 0.0) 2 1) (trans (list (+ (car x) a) (+ (cadr x) b) 0.0) 2 1)))
               (trans (getvar "viewctr") 1 2) (* (getvar "viewsize") (apply '/ (getvar "screensize")) 0.5) (* (getvar "viewsize") 0.5)))))
    (mapcar '(lambda(x)(redraw x 4)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex s))))
    (sssetfirst nil nil)
    (if(and(setq l1 (_hit-test p1 ss))
     (if(/= l1 nil)
       (progn
         (vla-setsubselection (car l1) (cadr l1) (cadr l1) (caddr l1) (caddr l1))
         (setq e (vla-GetText (car l1) (cadr l1) (caddr l1)))))
     (= (type (handent e)) 'ENAME)
     )
      (redraw (handent e) 3))
    (if(null l2)(setq l2 (car l1)))
    (cond
      ((and(= l1 nil)(/= l2 nil))(vla-ClearSubSelection l2))
      ((and(= l1 nil)(= l2 nil))(terpri))
      ((and(/= l1 nil)(/= (car l1) l2))(vla-ClearSubSelection l2))
      ((and(/= l1 nil)(= (car l1) l2))(terpri)))
    (setq l2 (car l1))
    (setq p1 (getpoint "选择表格内文字:"))
    )
  (setvar 'nomutt u)
  (mapcar '(lambda(x)(vla-ClearSubSelection x)) ss)
  (setq s (apply 'ssget (cons "C" ((lambda(x a b)(list (trans (list (- (car x)  a) (- (cadr x) b) 0.0) 2 1) (trans (list (+ (car x) a) (+ (cadr x) b) 0.0) 2 1)))
            (trans (getvar "viewctr") 1 2) (* (getvar "viewsize") (apply '/ (getvar "screensize")) 0.5) (* (getvar "viewsize") 0.5)))))
  (mapcar '(lambda(x)(redraw x 4)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex s))))
  (sssetfirst nil nil)
  (setvar 'osmode i)
  (setvar 'cmdecho o)
  (princ))

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-9-9 15:07 , Processed in 0.372667 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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