修改外围框单边各加10mm
我在百度里搜出朱老师写的一个最大外围框的lisp程式.看得不太懂.想改成,最大外围的四边再单边各加10mm,有没有大佬帮忙改一下怎么改?offset 偏移量设为 10 即可
只需要在
(setq sx (s1905271 y1 y2) y1 (car sx) y2 (cadr sx))
后加一行,即可
(setq x1 (+ x1 10) x2 (+ x2 10) y1 (+ y1 10) y2 (+ y2 10)) getbox,选择的东西一多,程序运行就很慢。朱老师写的这个会相对快一些。不知道从哪里修改能单边加大10mm 本帖最后由 飞雪神光 于 2023-5-9 07:37 编辑
hnzkhyyl 发表于 2023-5-9 07:12
getbox,选择的东西一多,程序运行就很慢。朱老师写的这个会相对快一些。不知道从哪里修改能单边加大10mm
;;最大外围框
(defun c:tes (/ &kw ent s1905271 ss1 sx x1 x1903211 x2 y1 y2)
(vl-load-com)
;长度为整数
(defun s1905271 (i1 i2 / i i1 i2 i3 i4)
(setq i3 (* 0.5 (+ i2 i1)) i4 (- i2 i1) i (atof (rtos i4 2 0)))
(if (> i4 i) (setq i (+ i 1)) )
(setq i (* 0.5 i))
(list (- i3 i) (+ i3 i))
)
(defun x1903211 (obj / obj x y)
(vla-getboundingbox obj 'x 'y)
(mapcar 'vlax-safearray->list (list x y));点表
)
(princ "\n请选择对象")
(if (setq &kw (ssget))
(progn
(setq ss1 '())
(while (setq ent (ssname &kw 0))
(setq &kw (ssdel ent &kw) ss1 (cons ent ss1))
);while
(setq ss1 (mapcar 'vlax-ename->vla-object ss1))
(setq ss1 (apply 'append (mapcar 'x1903211 ss1)))
(setq sx (vl-sort (mapcar 'car ss1) '<))
(setq x1 (car sx) x2 (last sx))
(setq sx (s1905271 x1 x2) x1 (car sx) x2 (cadr sx))
(setq sx (vl-sort (mapcar 'cadr ss1) '<))
(setq y1 (car sx) y2 (last sx))
(setq sx (s1905271 y1 y2) y1 (car sx) y2 (cadr sx))
(setq x1 (- x1 10) x2 (+ x2 10) y1 (- y1 10) y2 (+ y2 10))
(entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1) '(38 . 0) (cons 10 (list x1 y1)) (cons 10 (list x2 y1)) (cons 10 (list x2 y2)) (cons 10 (list x1 y2))))
)
)
(princ)
)
yshf 发表于 2023-5-9 07:06
只需要在
(setq sx (s1905271 y1 y2) y1 (car sx) y2 (cadr sx))
后加一行,即可
y是加,x应该是减 谢谢楼上的各位大佬,现在可以了 (setq x1 (- x1 10) x2 (+ x2 10) y1 (- y1 10) y2 (+ y2 10))
页:
[1]