立即注册 登录
晓东CAD家园-论坛 返回首页

eachy的个人空间 http://bbs.xdcad.net/?14 [收藏] [复制] [分享] [RSS]

日志

实体排序示例

已有 127 次阅读2013-5-6 17:41 |个人分类:Lisp

 
(defun ea:Clearcset (/ cset)
(if (not (vl-catch-all-error-p
(setq cset
(vl-catch-all-apply
'vla-item
(list
(vlax-get-property
(vlax-get-property
(vlax-get-acad-object)
'activedocument
)
'selectionsets
)
"CURRENT"
)
)
)
)
)
(vla-delete cset)
)
(princ)
)
;;实体排序示例三,按行连接文字
;;构造实体表要根据需要决定采用 Object 还是 Entity,这样才能精简代码并提高效率
(vl-load-com)
(defun c:t3 (/ objlst tlst first_obj strlst fstr)
(ea:clearcset);_ 此处必须,原因见以前讨论帖
(princ "\n选择按行连接文字...")
(if (ssget '((0 . "text")))
(progn
;;获取实体表
(vlax-map-collection
(vlax-get-property
(vlax-get-property (vlax-get-acad-object) 'activedocument)
'activeselectionset
)
'(lambda (x)
(setq objlst
(cons (list (vlax-get x 'insertionpoint) x) objlst)
)
(if (not hi)
(setq hi (vlax-get-property x 'height))
) ;_ 取字高作为误差,仅取一次
)
) ;_ end vlax-map-colllection
;;排序并处理
(setq tlst (mapcar '(lambda (x) (mapcar 'cadr x))
(ea:sort_entity objlst 0 1 hi);_ 按行排序
) ;_ 排序后实体表
first_obj (mapcar 'car tlst) ;_每行第一个实体列表
strlst (mapcar '(lambda (x) (mapcar 'vla-get-textstring x))
tlst
) ;_ 每行字符串列表
fstr (mapcar '(lambda (x) (apply 'strcat x)) strlst) ;_合并每行字符串
)
(mapcar '(lambda (a b) (vlax-put-property a 'textstring b))
first_obj
fstr
) ;_ 修改每行第一个文字
(mapcar '(lambda (x) (mapcar 'vla-delete x))
(vl-remove nil (mapcar '(lambda (e) (cdr e)) tlst))
) ;_ 删除每行第二个以后的实体
)
)
(princ)
)
;;排序示例四:行对齐(文字)
(defun c:t4 (/ objlst tlst ptl hi)
(ea:clearcset);_ 此处必须,原因见以前讨论帖
(princ "\n选择按行对齐文字...")
(if (ssget '((0 . "text")))
(progn
;;获取实体表
(vlax-map-collection
(vlax-get-property
(vlax-get-property (vlax-get-acad-object) 'activedocument)
'activeselectionset
)
'(lambda (x / bb uu)
(vla-getboundingbox x 'bb 'uu);_还可以用来做实体对齐
(setq objlst
(cons (list (safearray-value bb) x) objlst)
)
(if (not hi)
(setq hi (vlax-get-property x 'height))
) ;_ 取字高作为误差,仅取一次
)
) ;_ end vlax-map-colllection
;;排序并处理
(setq tlst (ea:sort_entity objlst 0 1 hi);_ 按行排序
objlst (mapcar '(lambda (x) (mapcar 'cadr x))
tlst
) ;_ 排序后实体表
ptl (mapcar '(lambda (x) (caar x)) tlst) ;_每行第一个点
)
(mapcar '(lambda (a b)
(mapcar '(lambda (e)
(vla-move (cadr e)
(vlax-3d-point (car e))
(vlax-3d-point
(list (caar e) (cadr b) 0.)
)
)
)
a
)
)
tlst
ptl
)
)
)
(princ)
)

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

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

GMT+8, 2024-5-13 06:04 , Processed in 0.177880 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部