删除坐标相同文本对象 按照原y坐标排序
;;
;;程序名称:对象水平对齐程序,并且按照竖直方向排列
;;执行命令:tb2
;;程序功能:将选定的对象左对齐,并且按照竖直方向排列。
;;
(defun c:tb2(/ selobjs oldcmdecho) ;定义命令txtal,局部变量selobjs,oldcmdecho;
(setq oldcmdecho (getvar "cmdecho")) ;oldcmdecho 存储命令回显模式
(setvar "cmdecho" ) ;屏蔽提示
(setq selobjs (ssget ' ((0 . "TEXT,MTEXT")))) ;获取文字对象?todo (process2 selobjs) ;处理选中的对象;
(setvar "cmdecho" oldcmdecho) ;设置命令回显模式
(princ) ;todo?
)
(defun process2 (selobjs / amode apnt apnt_x
apnt_y count objname vlaxobj MinPoint
MaxPoint minext maxext ext_l ext_r
ext_m tpnt ext_y old_y countp lstp n is_del
orderlist n1
)
;; amode 对齐模式;apnt 对齐点;apnt_x 对齐点x坐标
;; apnt_y 对起点y坐标;count 计数器;
;; objname 获取图元名称 vlaxobj vla对象名
;; ext_y 原来的y坐标; old_y 上一个y坐标
;; countp 迁移位置的个数; lstp 所有的x坐标集合
;; n lstp 中的一个变量;is_del 是否删除了改对象
(if (not amode)
(setq amode "L")
)
(initget )
(setq apnt (getpoint "\n选择水平对齐方向的对齐点:"))
(setq apnt_x (car apnt)
apnt_y (cadr apnt)
)
(vl-load-com)
(setq count ) (repeat (sslength selobjs)
(setq objname (ssname selobjs count)) ;;ssname此函数将返回选择集 ss 中 index 所代表的图元名
(setq vlaxobj (vlax-ename->vla-object objname)) ;;将 AutoLISP 类型的对象名转换为 VLA 对象
(setq MinPoint (vlax-make-variant))
(setq MaxPoint (vlax-make-variant))
(vla-GetBoundingBox vlaxobj 'MinPoint 'MaxPoint)
(setq minext (vlax-safearray->list MinPoint))
(setq maxext (vlax-safearray->list MaxPoint))
(setq ext_y (cadr minext))
(setq is_del )
(foreach n orderlist
(progn ;看看是否需要删除对象
(if (> (abs (- n ext_y)));如果4大于间距则进行删除;
(if (= is_del ) ;只需要删除一次
(setq is_del )
)
)
)
)
(if (= is_del )
(setq orderlist (cons ext_y orderlist))
)
(setq count (+ count))
)
(print "before sort....")
(print orderlist)
(setq orderlist (vl-sort orderlist (function (lambda (e1 e2) (< e1 e2)))))
(print "after sort......")
(print orderlist)
(setq count )
(setq countp )
(setq old_y ) ;初始化一个值
(repeat (sslength selobjs) ;;repeat 此函数可判别每一个 expr 并重复执行 number 所叙述的次数,
(setq objname (ssname selobjs count)) ;;ssname此函数将返回选择集 ss 中 index 所代表的图元名
(setq vlaxobj (vlax-ename->vla-object objname)) ;;将 AutoLISP 类型的对象名转换为 VLA 对象
(setq MinPoint (vlax-make-variant))
(setq MaxPoint (vlax-make-variant))
(vla-GetBoundingBox vlaxobj 'MinPoint 'MaxPoint)
(setq minext (vlax-safearray->list MinPoint))
(setq maxext (vlax-safearray->list MaxPoint))
(setq ext_l (car minext))
(setq ext_r (car maxext))
(setq ext_m (+ (/ (abs (- ext_l ext_r)) ) ext_l))
(setq ext_y (cadr minext)) ;获取y坐标
(cond
((= amode "L")
(setq tpnt (list ext_l apnt_y))
)
((= amode "M")
(setq tpnt (list ext_m apnt_y))
)
((= amode "R")
(setq tpnt (list ext_r apnt_y))
)
)
(print old_y)
(print ext_l)
(print "=======")
(setq lstp (cons old_y lstp))
(print lstp)
(setq is_del )
(foreach n lstp
(progn ;看看是否需要删除对象
(if (> (abs (- n ext_y)));如果4大于间距则进行删除;
(if (= is_del ) ;只需要删除一次
(progn
(setq is_del )
(command "_erase" objname "") ;删除对象
(print "delete object")
)
)
)
)
)
(print "++++++++++")
(print objname)
(print is_del)
(setq countp )
(if (= is_del ) ;;如果没有删除对象
(progn ;移动对象
(setq tpnt (list ext_l ext_y));设置原来点坐标
(print tpnt)
(foreach n1 orderlist
(progn
(if (< ext_y n1)
(setq countp (+ countp));获取countp的位移
)
)
)
(print "countp now is ")
(print countp)
(setq apnt (list apnt_x (- apnt_y (* countp))));设置目标点
(print apnt)
(if tpnt
(command "_move" objname "" "non" tpnt "non" apnt)
) ;;(setq countp (+ countp))
) ) ;end if (setq old_y ext_y) ;再一次设置old_y (setq count (+ count))
)
)
删除坐标相同文本对象 按照原y坐标排序的更多相关文章
- 每日vim插件--vim中的文本对象及相关插件
最近在个人博客上 http://foocoder.com 每天都会介绍一个vim插件,想起来园子也好久没更新了,也来更新一篇. 今天按读者留言的要求,介绍下文本对象.同时还会介绍我在用的几个文本相关 ...
- ArcGIS api for javascript——加入地图并显示x,y坐标
这个示例报告了用户在地图上悬停和拖拽鼠标的鼠标指针坐标.通过事件监听器来更新鼠标移到的x和y坐标. 下行代码创建了地图: var map = new esri.Map("map") ...
- jquery删除添加输入文本框
效果体验:http://hovertree.com/texiao/jquery/67/ 效果图: 参考:http://hovertree.com/h/bjaf/traversing_each.htm ...
- 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米
/** * calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离 * @param array $point_1 第1个点的x,y坐标 array( ...
- AndroidCharts为折线图表添加y坐标
AndroidCharts 是一款轻量级的图表显示控件,对比起Android-Charts和AChartEngine来说简单和活泼了很多,适合数据展示不需要太过详细专业的场合,它支持简单且带动画的折线 ...
- Swift - 获取屏幕点击坐标下所有对象(SpriteKit游戏开发)
对于场景内对象元件的点击响应,我们可以在场景的touchesBegan()方法中内统一处理. SKScene中touchesBegan()是响应屏幕点击的方法,在这里面我们可以先获取点击位置下所有的对 ...
- python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片
首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...
- python添加、修改、删除、访问类对象属性的2种方法
1.直接添加.修改.删除.访问类对象属性 class Employee (object): empCount = 0 def __init__(self, name, salary) : self.n ...
- numpy的shape 和 gt的x、y坐标之间容易引起误会
用numpy来看shape,比如np.shape(img_data),会得到这样的结果(600,790,3) 注意:600不是横坐标,而是表示多少列,790才是横坐标 用numpy测试就可以看出: & ...
随机推荐
- MySQL5.7绿色版安装
1. 下载MySQL 5.7,地址:http://dev.mysql.com/downloads/mysql/ (选择32位或者64位版本需根据自身PC情况) 2. 下载后解压,比如我的目录结构是: ...
- cron expr
api docs说的很清楚,不需要去搜索, org.quartz 类 CronExpression java.lang.Object org.quartz.CronExpression 所有已实现的接 ...
- Xcode制作插件
转发至:https://onevcat.com/2013/02/xcode-plugin/ Xcode 4 插件制作入门 本文欢迎转载,但烦请保留此行出处信息:http://www.onevcat.c ...
- clearsSelectionOnViewWillAppear
@property (nonatomic) BOOL clearsSelectionOnViewWillAppear NS_AVAILABLE_IOS(3_2); // defaults to YES ...
- Android学习笔记之LinearLayout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- Unity3d之剥离alpha通道
unity中, 将图集的 alpha 通道剥离出来可减少包体大小和内存使用大小. 方法是将原来的一张 rgba 图分成一张 rgb 和一张 alpha 图,android上rgb和alpha图均采用e ...
- [iOS]C语言技术视频-06-程序循环结构(for{})
下载地址: 链接: http://pan.baidu.com/s/1dD11Zwt 密码: rke9
- [转]JavaScript通过参数动态调用函数——js中eval实现反射
以下文章出自 http://blog.rongzhiwang.com/king/archive/2012/08/13/javascriptjseval.aspx 今天碰到人问这样一个问题 ...
- http://www.linux-commands-examples.com/xmllint
http://www.linux-commands-examples.com/xmllint hen hao!
- CollectionView中deleteItems方法的使用
最近在做一个批量删除照片的功能,调用了 deleteItems这个方法,但是使用这个方法之后程序崩溃,报错:You need to also delete associated data from t ...