矩形等分
哪位大神帮忙改下代码,把输入的基准间距的数值手动输入一次数值后就自动记忆上次的数据,选择均分方向改为手动输入一次方向后就自动记忆上次的,就不用每次手动输入。最后要是能改为框选就好,主要用于矩形等分。;|
程序功能:给定2个角点、方向、间距基准,自动绘制均分线
程序过程:
1、给定2个角点
2、给定均分方向X或者Y
3、给定均分间距基准
4、绘制均分线
日期:20-09-03 By Owen.Chen
|;
(defun c:DF (/ _acad _doc _mspace _choiceXorY _p1 _p1x _p1y _p2 _p2x _p2y
_div_jj _base_x _base_y _lp1 _lp2
)
(vl-load-com)
(setq _acad (vlax-get-acad-object)
_doc (vla-get-activedocument _acad)
_mspace (vla-get-modelspace _doc)
)
;;给定2个数,获取第一个数除以第二个数结果的小数部分与整数部分
;;以列表的形式返回,(整数 小数)
(defun _get_f (a b / _c)
(setq _c (/ a b))
(list (fix _c) (- _c (fix _c)))
)
;;给定2个数与均分基数,计算分段数量并返回间距
;;以列表的形式返回,(分段数量 分段间距)
(defun _get_fd (a b js / _f _fd _len)
(setq _len (abs (- a b))
_f (_get_f _len js)
)
(if (> (cadr _f) 0.5) (setq _fd (1+ (car _f))) (setq _fd (car _f)))
(list _fd (/ _len _fd))
)
;;获取需均分的2个角点坐标
(princ "选取均分线的范围角点:\n")
(setq _p1 (getpoint "第一点"))
(setq _p2 (getcorner _p1 "\n第二点"))
(setq _p1x (car _p1)
_p1y (cadr _p1)
_p2x (car _p2)
_p2y (cadr _p2)
)
;;获取均分基准间距
(setq _jz (getint "输入基准间距(mm):"))
;;设置字典,指定选择均分线的方向X或Y
(initget "X轴 Y轴")
(setq _choiceXorY (getkword "\n选择均分方向"))
(cond
((= _choiceXorY "X轴")
(setq _div_jj (_get_fd _p1x _p2x _jz))
(if (< _p1x _p2x) (setq _base_x _p1x) (setq _base_x _p2x))
)
((= _choiceXorY "Y轴")
(setq _div_jj (_get_fd _p1y _p2y _jz))
(if (< _p1y _p2y) (setq _base_y _p1y) (setq _base_y _p2y))
)
)
;;根据分段信息绘制分段线
(repeat (- (car _div_jj) 1)
;;获取线段的坐标点
(if _base_x
(progn
(setq _base_x (+ _base_x (cadr _div_jj)))
(setq _lp1 (vlax-3d-point _base_x _p1y)
_lp2 (vlax-3d-point _base_x _p2y)
)
)
)
(if _base_y
(progn
(setq _base_y (+ _base_y (cadr _div_jj)))
(setq _lp1 (vlax-3d-point _p1x _base_y)
_lp2 (vlax-3d-point _p2x _base_y)
)
)
)
(vla-addline _mspace _lp1 _lp2)
)
(princ)
)
自己顶下:lol 最好要有图片表达和案例,这样大神们一看就知道什么意思呢 看来要试下
楼主应该把要求用图形表达清楚,这样大佬才知道怎么给你修改。
页:
[1]