zwq8629 发表于 2023-8-8 20:03:58

中心圆(穿线孔)

(defun c:zy (/ ss r i minpt maxpt p p_r p_u p_l p_d)
(prompt "\n选择对象")

(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") ))

    )
)

请大师帮忙修改:根据选择对象的大小改变中心圆的大小,(选择对象越大中心圆越大,反之越小)

ssyfeng 发表于 2023-8-8 23:13:57

本帖最后由 ssyfeng 于 2023-8-8 23:18 编辑

看看是不是这个效果:




ssyfeng 发表于 2023-8-9 15:19:40

这样?


czb203 发表于 2023-8-8 21:23:21

(defun c:zy (/ ss r i minpt maxpt p p_r p_u p_l p_d)
(prompt "\n选择对象")
(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)))
      (setq rr (vla-get-radius a))
      (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(/ rr 3))))
      (entmake (list '(0 . "line") ))
    )
)
)

zwq8629 发表于 2023-8-8 21:41:38

czb203 发表于 2023-8-8 21:23


不会随着选择对象的大小变大变小

czb203 发表于 2023-8-9 07:31:49

ssyfeng 发表于 2023-8-8 23:13
看看是不是这个效果:

向大神学习,感谢分享~

Noangler 发表于 2023-8-9 08:53:06

ssyfeng 发表于 2023-8-8 23:13
看看是不是这个效果:

应该不是这个效果。他想要的是中间生成一个线割的穿丝孔,形状大就把穿线孔做大点,形状小就把穿丝孔做小点,一般最大就用8mm的孔就行了。

zwq8629 发表于 2023-8-9 09:12:19

ssyfeng 发表于 2023-8-8 23:13
看看是不是这个效果:

多谢大师,我自己又改了下,已经OK了

hzyhzjjzh 发表于 2023-8-9 12:43:31

多谢楼主分享{:1_1:}

zwq8629 发表于 2023-8-9 14:11:53

ssyfeng 发表于 2023-8-8 23:13
看看是不是这个效果:


大师,如果我要求这种图形的中心圆或者中心线了
页: [1] 2
查看完整版本: 中心圆(穿线孔)