明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: xyz2009xyz

[求助]程序完善

  [复制链接]
发表于 2010-7-28 18:22:00 | 显示全部楼层
  1. ;;程序名称:对象水平垂直程序
  2. ;;执行命令:ahobj
  3. ;;程序功能:将选定的对象左对齐、右对齐或对中。
  4. ;;
  5. ;;
  6. (defun c:QD (/ selobjs oldcmdecho)
  7.   (setq oldcmdecho (getvar "cmdecho"))
  8.   (setvar "cmdecho" 0)
  9.   (setq selobjs (ssget))
  10.   (if (or (not selobjs) (= (sslength selobjs) 1))
  11.     (princ "\n你必须选定两个或两个以上的对象")
  12.     (process selobjs)
  13.   )
  14.   (setvar "cmdecho" oldcmdecho)
  15.   (princ)
  16. )
  17. (defun process (selobjs   /     amode     apnt apnt_x
  18.   apnt_y   count     objname   vlaxobj MinPoint
  19.   MaxPoint  minext    maxext    ext_l ext_r
  20.   ext_m   tpnt
  21.         )
  22.   (initget "L M R T MT B")
  23.   (setq amode
  24.   (getkword
  25.     "\n选择对齐方式[左对齐(L)/对中(M)/右对齐(R)/上对齐(T)/中间(MT)/下对齐(B)]<左对齐>:"
  26.   )
  27.   )
  28.   (if (not amode)
  29.     (setq amode "L")
  30.   )
  31.   (initget 1)
  32.   (setq apnt (getpoint "\n选择对齐方向的对齐点:"))
  33.   (setq apnt_x (car apnt)
  34. apnt_y (cadr apnt)
  35.   )
  36.   (vl-load-com)
  37.   (setq count 0)
  38.   (setvar "osmode" 0)
  39.   (repeat (sslength selobjs)
  40.     (setq objname (ssname selobjs count))
  41.     (setq vlaxobj (vlax-ename->vla-object objname))
  42.     (setq MinPoint (vlax-make-variant))
  43.     (setq MaxPoint (vlax-make-variant))
  44.     (vla-GetBoundingBox vlaxobj 'MinPoint 'MaxPoint)
  45.     (setq minext (vlax-safearray->list MinPoint))
  46.     (setq maxext (vlax-safearray->list MaxPoint))
  47.     (setq ext_l (car minext))
  48.     (setq ext_r (car maxext))
  49.     (setq ext_m (+ (/ (abs (- ext_l ext_r)) 2) ext_l))
  50.     (setq ext_t (cadr maxext))
  51.     (setq ext_b (cadr minext))
  52.     (setq ext_mt (+ (/ (abs (- ext_t ext_b)) 2) ext_b))
  53.     (cond
  54.       ((= amode "L")
  55.        (setq tpnt (list ext_l apnt_y))
  56.       )
  57.       ((= amode "M")
  58.        (setq tpnt (list ext_m apnt_y))
  59.       )
  60.       ((= amode "R")
  61.        (setq tpnt (list ext_r apnt_y))
  62.       )
  63.       ((= amode "T")
  64.        (SETQ tpnt (list apnt_x ext_t))
  65.       )
  66.       ((= amode "MT")
  67.        (setq tpnt (list apnt_x ext_mt))
  68.       )
  69.       ((= amode "B")
  70.        (setq tpnt (list apnt_x ext_b))
  71.       )
  72.     )
  73.     (print tpnt)
  74.     (if tpnt
  75.       (command "_move" objname "" tpnt apnt)
  76.     )
  77.     (setq count (1+ count))
  78.   )
  79. )


选择对齐点之后在关捕捉不就好了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 08:34 , Processed in 0.161314 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表