删除坐标相同文本对象 按照原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测试就可以看出: & ...
随机推荐
- Python中super的用法
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复调用(钻石继承)等种种问题.总之前人留下的经验就是:保持一致性 ...
- Padding和父子继承宽高之间的关系
1.父子之间宽高的继承关系 父亲有一个宽高,儿子若不设定宽高会继承,继承宽的100%,高度靠自己内容撑开. 2.padding对儿子宽的影响 看代码: <style> .father{ w ...
- Python+Selenuim测试网站,只能打开Firefox浏览器却不能打开网页的解决方法
最开始我使用的Selenium版本为2.48,Firefox版本为37,自动化打开网站的时候,可以正常打开. 后来由于Firefox的自检测更新,版本更新为47,导致版本不兼容,自动化打开网站浏览器时 ...
- PHP和MySQL Web开发(原书第4版) 高清PDF+源代码
PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区 作者:Linux [字体:大 中 小] 内容简介 <PHP和My ...
- Ubuntu安装MongoDB和PHP扩展
MongoDB是一个可伸缩的,高性能的开源NoSQL 文档数据库.主要用C++开发完成.面向文档存储,全索引支持,可复制和高可用性,自动分片等特征.其在非关系型数据库中是功能最丰富,最像关系型数据库 ...
- OPENCV图像变换-2
一.经典霍夫变换 霍夫变换是图像处理中的一种特征提取技术,该方法通过在一个参数空间中通过计算累计结果的局部最大值来得到一个符合该特定形状的集合,作为结果. 运用两个坐标空间之间的变换,将一个空间中具有 ...
- 微信小程序下拉刷新和上拉加载
小程序知识点二 1.上拉加载和下拉刷新 Wxml文件 <scroll-view scroll-top="{{scrollTop}}" scroll-y="true& ...
- ios开发获取SIM卡信息
.加入一个Framework(CoreTelephony.framework). .引入头文件 #import<CoreTelephony/CoreTelephonyDefines.h> ...
- GCJ Round 1C 2009 Problem C. Bribe the Prisoners
区间DP.dp[i][j]表示第i到第j个全部释放最小费用. #include<cstdio> #include<cstring> #include<cmath> ...
- leetcode-004 insertion sort list
package leetcode; class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } ...