;;
;;程序名称:对象水平对齐程序,并且按照竖直方向排列
;;执行命令: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坐标排序的更多相关文章

  1. 每日vim插件--vim中的文本对象及相关插件

    最近在个人博客上 http://foocoder.com  每天都会介绍一个vim插件,想起来园子也好久没更新了,也来更新一篇. 今天按读者留言的要求,介绍下文本对象.同时还会介绍我在用的几个文本相关 ...

  2. ArcGIS api for javascript——加入地图并显示x,y坐标

    这个示例报告了用户在地图上悬停和拖拽鼠标的鼠标指针坐标.通过事件监听器来更新鼠标移到的x和y坐标. 下行代码创建了地图: var map = new esri.Map("map") ...

  3. jquery删除添加输入文本框

    效果体验:http://hovertree.com/texiao/jquery/67/ 效果图: 参考:http://hovertree.com/h/bjaf/traversing_each.htm ...

  4. 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米

    /** * calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离 * @param array $point_1 第1个点的x,y坐标 array( ...

  5. AndroidCharts为折线图表添加y坐标

    AndroidCharts 是一款轻量级的图表显示控件,对比起Android-Charts和AChartEngine来说简单和活泼了很多,适合数据展示不需要太过详细专业的场合,它支持简单且带动画的折线 ...

  6. Swift - 获取屏幕点击坐标下所有对象(SpriteKit游戏开发)

    对于场景内对象元件的点击响应,我们可以在场景的touchesBegan()方法中内统一处理. SKScene中touchesBegan()是响应屏幕点击的方法,在这里面我们可以先获取点击位置下所有的对 ...

  7. python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片

    首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...

  8. python添加、修改、删除、访问类对象属性的2种方法

    1.直接添加.修改.删除.访问类对象属性 class Employee (object): empCount = 0 def __init__(self, name, salary) : self.n ...

  9. numpy的shape 和 gt的x、y坐标之间容易引起误会

    用numpy来看shape,比如np.shape(img_data),会得到这样的结果(600,790,3) 注意:600不是横坐标,而是表示多少列,790才是横坐标 用numpy测试就可以看出: & ...

随机推荐

  1. CSS中绝对定位依据谁进行定位?

    结论 绝对定位的top等的依据元素需满足3个条件: 已定位(position:relative/fixed/absolute) 最近的 祖辈元素(一定是祖辈元素不是同辈元素) 说明 一般会为body设 ...

  2. 多元线性回归----Java简单实现

    http://www.cnblogs.com/wzm-xu/p/4062266.html 多元线性回归----Java简单实现   学习Andrew N.g的机器学习课程之后的简单实现. 课程地址:h ...

  3. HDU 5171 GTY's birthday gift 矩阵快速幂

    GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  4. ecos的app处理类

    get 获取指定app的对象实例 参数 $app_name 返回指定app name的app类实例 app::get('desktop') render 获取base_render类的实例 base_ ...

  5. Task 编程中的异常处理

    在 .Net 开发中, 使用 Task . Task<T> 进行异步编程是非常方便的, 但是在处理 Task 产生的异常时, 需要注意一个问题, 比如下面的代码: ? 1 2 3 4 5 ...

  6. PAT (Advanced Level) 1012. The Best Rank (25)

    简单排序题. 注意:分数相同的人排名相同. #include<iostream> #include<cstring> #include<cmath> #includ ...

  7. The 2014 ACMICPC Asia Invitational Xian

    上半年邀请赛的时候真是险而又险地2题拿了个铜,确实其实跟没拿一样......现场前复盘一下,长长记性 [A]签到题 [B]最短路+DFS [C]最短路 [D]构造+欧拉回路 [E]数论,最佳平方逼近 ...

  8. [Programming WCF Services]Chapter 1. WCF Essentials - Metadata Exchange

    1.HTTP-GET WCF 方式 通过Http的方式提供metadata 1.1.配置文件方式 <system.serviceModel> <services> <se ...

  9. jQuery中$.get、$.post、$.getJSON和$.ajax的用法

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 一.jQuery中调用ajax的4种方法:$.get.$.post.$ge ...

  10. iOS_init相关信息

    第一.initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. 第二.initWithCoder 是一个类在IB中创建但 ...