;;
;;程序名称:对象水平对齐程序,并且按照竖直方向排列
;;执行命令: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. (Question)CSS中position的绝对定位问题

    RT,绝对定位相对于定位的元素存在是哪里? https://yunpan.cn/crjSMTiak2srZ  访问密码 1570

  2. 使用Jetty搭建Java Websocket Server,实现图像传输

    https://my.oschina.net/yushulx/blog/298140 How to Implement a Java WebSocket Server for Image Transm ...

  3. 畅通工程续 (dijkstra)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. bootstrap建立响应式网站——tab选项卡

    1.bootstrap给我们提供了标签页 细细看了一下bootstrap的标签页源码,对tab选项卡有了更深的理解.其实说来也简单,以前自己写js和css时没有意识到整体的划分.就是分为两部分:一部分 ...

  5. Apache 隐藏入口文件以及防盗链.htaccess 文件

    Apache 隐藏入口文件以及防盗链.htaccess 文件 RewriteEngine on # 隐藏入口文件 RewriteCond %{REQUEST_FILENAME} !-d Rewrite ...

  6. 转发:招聘一个靠谱的 iOS

    觉得很瘦感触,因此转发:http://blog.sunnyxx.com/2015/07/04/ios-interview/ 近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更 ...

  7. [Unity Asset]AssetBundle系列——游戏资源打包

    转载:http://www.cnblogs.com/sifenkesi/p/3557231.html 将本地资源打包,然后放到资源服务器上供游戏客户端下载或更新.服务器上包含以下资源列表:(1)游戏内 ...

  8. 10、手把手教你Extjs5(十)自定义模块的设计

    从这一节开始我们来设计并完成一个自定义模块.我们先来确定一个独立的模块的所能定义的一些模块信息.以下信息只是我自己在开发过程中想到或用到的,希望有新的想法的或者有建议的跟贴回复. 一个独立模块包含以下 ...

  9. css3动画-animation

    animation驱使一组css style变化到另外一组css style,它可以定义keyframes的集合,指定style的开始和结束状态,它是transition的增强. 配置animatio ...

  10. JDBC连接数据库以及简单的操作

    package com.zhiyuan.jdbc.util; import java.sql.Connection;import java.sql.DriverManager;import java. ...