明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1767|回复: 6

[求助]最大外形四点定位

[复制链接]
发表于 2009-6-14 23:28:00 | 显示全部楼层 |阅读模式

请各位高手帮我看看,为什么我指定四个圆中心放置点会走位

(我希望达到的效果是,不论我指定任何放置点都是四个圆的中心)

附上测试源码

(defun c:22()
(vl-load-com)
(setq mv_osm(getvar "osmode"))
(setvar "osmode" mv_osm)
(command "ucs" "w")
(setq ad_dim_sel (ssget))
(dim_box)
(initget 1)
(setq cen_pt (getpoint  "\n请指定四个圆中心放置点:"))
(command "ucs" "o" cen_pt)
(setvar "osmode" 0)
(command "circle" box_xdis22 5)
(command "circle" box_xdis_22 5)
(command "circle" box_ydis22 5)
(command "circle" box_ydis_22 5)
);defun
;;;
;;;
;;;
(defun dim_box()
(setq n 10)
(setq minx0 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
(setq i 0)
(repeat (sslength ad_dim_sel)
   (setq end (ssname ad_dim_sel i))
   (setq end_data (entget end))
   (Min_Max)
   (setq i(1+ i))
)
   (if (= n nil)(setq n 0))
   (setq m1x(fix (- minx0 n))
     m2x (fix (+ maxx0 n))
     m1y (fix (- miny0 n))
     m2y (fix (+ maxy0 n))
     pmin (list m1x m1y)
     pmax (list m2x m2y))
  (setq GetBox-midpt (polar pmin
       (angle pmin pmax)
       (/(distance pmin pmax) 2.0)))
  (setq box_p2(list(car GetBox-midpt)(cadr pmin)))
  (setq box_p4(list(car pmin)(cadr GetBox-midpt)))
  (setq box_xdis(distance pmin box_p2))
  (setq box_ydis(distance pmin box_p4))
  (setq box_xdis_22(polar GetBox-midpt pi (+ box_xdis 0)))
  (setq box_xdis22(polar GetBox-midpt 0 (+ box_xdis 0)))
  (setq box_ydis_22(polar GetBox-midpt (* 0.5 pi) (+ box_ydis 0)))
  (setq box_ydis22(polar GetBox-midpt (* 1.5 pi) (+ box_ydis 0)))
);defun
;;;
;;;
;;;求选集是大外形坐标
(defun Min_Max()
   (vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp)
   (setq minp (vlax-safearray->list minp)
     maxp (vlax-safearray->list maxp))
   (setq minx (car minp)
     maxx (car maxp)
     miny (cadr minp)
     maxy (cadr maxp))
   (if (> minx0 minx) (setq minx0 minx))
   (if (> miny0 miny) (setq miny0 miny))
   (if (< maxx0 maxx) (setq maxx0 maxx))
   (if (< maxy0 maxy) (setq maxy0 maxy))
);defun

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-6-15 02:16:00 | 显示全部楼层
  1. (defun c:tt ()
  2.   (vl-load-com)
  3.   ;; 求选集是大外形坐标
  4.   (defun Min_Max ()
  5.     (vla-getboundingbox (vlax-ename->vla-object end) 'minp 'maxp)
  6.     (setq minp (vlax-safearray->list minp)
  7.    maxp (vlax-safearray->list maxp)
  8.    minx (car minp)
  9.    maxx (car maxp)
  10.    miny (cadr minp)
  11.    maxy (cadr maxp)
  12.     )
  13.     (if (> minx0 minx)
  14.       (setq minx0 minx)
  15.     )
  16.     (if (> miny0 miny)
  17.       (setq miny0 miny)
  18.     )
  19.     (if (< maxx0 maxx)
  20.       (setq maxx0 maxx)
  21.     )
  22.     (if (< maxy0 maxy)
  23.       (setq maxy0 maxy)
  24.     )
  25.   )
  26.   ;;
  27.   (defun dim_box ()
  28.     (setq n 10
  29.    minx0 1e6
  30.    miny0 1e6
  31.    maxx0 -1e6
  32.    maxy0 -1e6
  33.    i 0
  34.     )
  35.     (repeat (sslength ad_dim_sel)
  36.       (setq end      (ssname ad_dim_sel i)
  37.      end_data (entget end)
  38.       )
  39.       (Min_Max)
  40.       (setq i (1+ i))
  41.     )
  42.     (if (= n nil)
  43.       (setq n 0)
  44.     )
  45.     (setq m1x        (fix (- minx0 n))
  46.    m2x        (fix (+ maxx0 n))
  47.    m1y        (fix (- miny0 n))
  48.    m2y        (fix (+ maxy0 n))
  49.    pmin        (list m1x m1y)
  50.    pmax        (list m2x m2y)
  51.    GetBox-midpt (polar pmin (angle pmin pmax) (/ (distance pmin pmax) 2.0))
  52.    box_p2       (list (car GetBox-midpt) (cadr pmin))
  53.    box_p4       (list (car pmin) (cadr GetBox-midpt))
  54.    box_xdis     (distance pmin box_p2)
  55.    box_ydis     (distance pmin box_p4)
  56.    p4        (polar GetBox-midpt pi (+ box_xdis 0))
  57.    p6        (polar GetBox-midpt 0 (+ box_xdis 0))
  58.    p8        (polar GetBox-midpt (* 0.5 pi) (+ box_ydis 0))
  59.    p2        (polar GetBox-midpt (* 1.5 pi) (+ box_ydis 0))
  60.     )
  61.   )
  62.   ;;
  63.   (setq mv_osm (getvar "osmode"))
  64.   (command "ucs" "")
  65.   (setq ad_dim_sel (ssget))
  66.   (dim_box)
  67.   (initget 1)
  68.   (setq cen_pt (getpoint "\n请指定四个圆中心放置点:"))
  69.   (setvar "osmode" 0)
  70.   (command "circle" p6 5)
  71.   (setq s1 (entlast))
  72.   (command "circle" p4 5)
  73.   (setq s2 (entlast))
  74.   (command "circle" p2 5)
  75.   (setq s3 (entlast))
  76.   (command "circle" p8 5)
  77.   (setq s4 (entlast)
  78. pt (polar p6 0 (* (distance p4 p6) 0.5))
  79.   )
  80.   (command "move" s1 s2 s3 s4 "" pt cen_pt)
  81.   (setvar "osmode" mv_osm)
  82.   (princ)
  83. )
发表于 2009-6-15 09:25:00 | 显示全部楼层

(setq mv_osm(getvar "osmode"))
(setvar "osmode" mv_osm)

有寫和沒寫是一樣的...

 楼主| 发表于 2009-6-15 19:48:00 | 显示全部楼层
XYP1964谢谢你的帮助,但是我指定四个圆中心放置点还是会走位
 楼主| 发表于 2009-6-15 22:23:00 | 显示全部楼层
不只能否用坐标转换来控制呢?请高手出来说两句
 楼主| 发表于 2009-6-16 19:18:00 | 显示全部楼层
不知能否用坐标转换来控制呢?请高手出来指正
 楼主| 发表于 2009-6-17 19:33:00 | 显示全部楼层
继续顶,希望高手的出现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-24 20:41 , Processed in 0.157807 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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