当前位置:
首页 >
对象水平对齐,并且按照竖直方向排列
发布时间:2024/4/15
49
豆豆
生活随笔
收集整理的这篇文章主要介绍了
对象水平对齐,并且按照竖直方向排列
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
;;
;;程序名称:对象水平对齐程序,并且按照竖直方向排列
;;执行命令:tb2
;;程序功能:将选定的对象左对齐,并且按照竖直方向排列。
;;
(defun c:tb2(/ selobjs oldcmdecho) ;定义命令txtal,局部变量selobjs,oldcmdecho;(setq oldcmdecho (getvar "cmdecho")) ;oldcmdecho 存储命令回显模式(setvar "cmdecho" 0) ;屏蔽提示(setq selobjs (ssget ' ((0 . "TEXT,MTEXT")))) ;获取文字对象?todo
(process2 selobjs) ;处理选中的对象;(setvar "cmdecho" oldcmdecho) ;设置命令回显模式(princ) ;todo?
)
(defun process2 (selobjs / amode apnt apnt_xapnt_y count objname vlaxobj MinPointMaxPoint minext maxext ext_l ext_rext_m tpnt ext_y old_y countp lstp n is_del) ;; 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 1)(setq apnt (getpoint "\n选择水平对齐方向的对齐点:"))(setq apnt_x (car apnt)apnt_y (cadr apnt))(vl-load-com)(setq count 0)(setq countp 0) (setq old_y 0) ;初始化一个值(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)) 2) 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 1)(foreach n lstp (progn ;看看是否需要删除对象(if (> 4 (abs (- n ext_y)));如果4大于间距则进行删除;(if (= is_del 1) ;只需要删除一次(progn (setq is_del 2)(command "_erase" objname "") ;删除对象(print "delete object"))))))(print "++++++++++")(print objname)(print is_del)(if (= is_del 1) ;;如果没有删除对象(progn ;移动对象(setq tpnt (list ext_l ext_y));设置原来点坐标(print tpnt)(setq apnt (list apnt_x (- apnt_y (* 600 countp))));设置目标点(print apnt)(if tpnt (command "_move" objname "" "non" tpnt "non" apnt))(setq countp (1+ countp)))) ;end if (setq old_y ext_y) ;再一次设置old_y(setq count (1+ count)))
)
总结
以上是生活随笔为你收集整理的对象水平对齐,并且按照竖直方向排列的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 3409: [Usaco2009 Oct
- 下一篇: postfix本机测试本机时,telne