明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2005|回复: 7

[讨论] 选取对象中心画圆,高手在来改下吧,加条线上去,就很完美了

[复制链接]
发表于 2011-4-30 14:42:11 | 显示全部楼层 |阅读模式
(defun c:ab (/ ss r i minpt maxpt p)
     (prompt "\n快速建立中点,请框选对象")

(command "layer" "s" "0" "")
  (if (and (setq ss (ssget))
           (setq r 0.33)
      )
    (repeat (setq i (sslength ss))
      (setq i (1- i) a (vlax-ename->vla-object (ssname ss i)))
      (vla-getboundingbox a 'minpt 'maxpt)
      (mapcar 'set '(minpt maxpt) (mapcar 'vlax-safearray->list (list minpt maxpt)))
      (setq p (mapcar '(lambda (x y) (/ (+ x y) 2.0)) minpt maxpt))
      (entmake (list '(0 . "CIRCLE") (cons 10 p) (cons 40 r)))

(entmake (list '(0 . "line") ))

    )
  )

(command "layer" "s" "cut" "")
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-4-30 15:06:28 | 显示全部楼层
(defun c:ab (/ ss r i minpt maxpt p p_r p_u p_l p_d)
  (prompt "\n快速建立中点,请框选对象")
  (command "layer" "s" "0" "")
  (if (and (setq ss (ssget))
           (setq r 0.33)
      )
    (repeat (setq i (sslength ss))
      (setq i (1- i) a (vlax-ename->vla-object (ssname ss i)))
      (vla-getboundingbox a 'minpt 'maxpt)
      (mapcar 'set '(minpt maxpt) (mapcar 'vlax-safearray->list (list minpt maxpt)))
      (setq p (mapcar '(lambda (x y) (/ (+ x y) 2.0)) minpt maxpt))
      (entmake (list '(0 . "CIRCLE") (cons 10 p) (cons 40 r)))
      ;;;增加线
      (setq p_r (polar p 0 (* r 1.3)))
      (setq p_u (polar p (* 0.5 pi) (* r 1.3)))
      (setq p_l (polar p pi (* r 1.3)))
      (setq p_d (polar p (* -0.5 pi) (* r 1.3)))
      (entmake (list '(0 . "line") (cons 10 p_r) (cons 11 p_l)))
      (entmake (list '(0 . "line") (cons 10 p_d) (cons 11 p_u)))
    )
  )
  (command "layer" "s" "cut" "")
)
发表于 2011-4-30 15:19:35 | 显示全部楼层
本帖最后由 啵浪鼓 于 2011-4-30 15:21 编辑

楼上是增加十字线
楼下是增加一条到边界线
(defun c:ab (/ ss r i minpt maxpt p)
     (prompt "\n快速建立中点,请框选对象")

(command "layer" "s" "0" "")
  (if (and (setq ss (ssget))
           (setq r 0.33)
      )
    (repeat (setq i (sslength ss))
      (setq i (1- i) a (vlax-ename->vla-object (ssname ss i)))
      (vla-getboundingbox a 'minpt 'maxpt)
      (mapcar 'set '(minpt maxpt) (mapcar 'vlax-safearray->list (list minpt maxpt)))
      (setq p (mapcar '(lambda (x y) (/ (+ x y) 2.0)) minpt maxpt))
      (entmake (list '(0 . "CIRCLE") (cons 10 p) (cons 40 r)))
      ;;;增加一条到边界的线
      (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(8 . "0")
                            '(67 . 0) '(62 . 1)
                             (cons 10 p) (cons 11 (list (car p) (cadr maxpt))))
      )

    )
  )
  (command "layer" "s" "cut" "")
)
 楼主| 发表于 2011-4-30 15:36:23 | 显示全部楼层
程序很好,如果能只在短边画就好了 因为竖着的话,线就变很长了[在长边,不是短边。]
能否加个判断?
又如,当所选短边>8.0mm时就画3.0mm线
发表于 2011-5-1 07:21:11 | 显示全部楼层
画穿丝孔?
发表于 2011-5-3 10:39:49 | 显示全部楼层
應該是做穿絲孔的程式!!
雖然可自動繪製在圖元中心
但以這程式做穿線孔應該是放槍不斷!
发表于 2012-3-29 23:41:13 | 显示全部楼层
duotu007 发表于 2011-4-30 15:06
(defun c:ab (/ ss r i minpt maxpt p p_r p_u p_l p_d)
  (prompt "\n快速建立中点,请框选对象")
  (com ...

找线段的中心点,能不能弄成自动在线段两端绘画圆,并成红色选中状态。可以方便检查有那条线是没有连接上。
发表于 2012-3-30 08:22:06 | 显示全部楼层
vla-getboundingbox求中心插入穿线孔,不是很理想吧,
一是对于小尺寸方形或圆形比较理想,对大尺寸图形线割引线就很长了,
比如100*100的引线就要50长了(穿线孔到边距离一般是3-4MM)浪费线割时间了,
二是对于一些弧状或L形等特殊图形,穿线孔就有可能落在图形外边了,
至于穿线孔到边线,可以通过求圆心到外形最近点再连线就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-25 04:45 , Processed in 0.216378 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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