求助,实现不按回车按默认绘制
求助,希望大神帮忙修改下代码要求:
1、输入命令后不按回车即可按默认值去绘制/输入自定义值按回车后绘制
2、绘制完成后给绘制对象编组
(defun c:HFF ( / p0 p1 p2 radius angle1 angle2 angle_diff arc1 arc2 weld_height)
;; 保存当前图层
(setq current_layer (getvar "CLAYER"))
;; 创建或设置图层为“HF焊缝”,颜色为1
(if (not (tblsearch "LAYER" "HF焊缝"))
(command "_.layer" "_make" "HF焊缝" "_color" "1" "HF焊缝" "")
(setvar "CLAYER" "HF焊缝")
)
;; 保护变量设置,确保正交模式和对象捕捉开启
(setq osnap (getvar "osmode"))
(setq ortho (getvar "orthomode"))
(setvar "osmode" 3) ; 开启对象捕捉
(setvar "orthomode" 1) ; 开启正交模式
;; 提示输入焊缝高度,默认值为4
(setq weld_height (getint "\n指定焊缝剖面角点或直接输入焊缝高度<默认4>: "))
(if (null weld_height) (setq weld_height 4))
;; 选择原点
(setq p0 (getpoint "\n请选择原点: "))
;; 选择第1个点,不画线
(setq p1 (getpoint p0 "\n请选择第1个点: "))
;; 自动回到原点并选择第2个点,不画线
(setq p2 (getpoint p0 "\n请选择第2个点: "))
;; 计算角度
(setq angle1 (angle p0 p1))
(setq angle2 (angle p0 p2))
;; 计算角度差
(setq angle_diff (abs (- angle1 angle2)))
;; 如果角度差大于180度,则调整角度方向
(if (> angle_diff pi)
(progn
(setq temp angle1)
(setq angle1 angle2)
(setq angle2 temp)
)
)
;; 绘制以p0为圆心的半径为1到weld_height的圆弧
(setq radius 1)
(while (<= radius weld_height)
;; 创建顺时针方向的圆弧
(setq arc1 (entmakex (list
'(0 . "ARC")
(cons 10 p0) ; 圆心
(cons 40 radius) ; 半径
(cons 50 angle1) ; 起始角度
(cons 51 angle2) ; 结束角度
)))
;; 创建逆时针方向的圆弧
(setq arc2 (entmakex (list
'(0 . "ARC")
(cons 10 p0) ; 圆心
(cons 40 radius) ; 半径
(cons 50 angle2) ; 起始角度
(cons 51 angle1) ; 结束角度
)))
;; 删除较长的圆弧
(if (> (vlax-curve-getdistatparam arc1 (vlax-curve-getendparam arc1))
(vlax-curve-getdistatparam arc2 (vlax-curve-getendparam arc2)))
(entdel arc1)
(entdel arc2))
(setq radius (1+ radius))
)
;; 还原变量设置
(setvar "osmode" osnap)
(setvar "orthomode" ortho)
;; 重新生成视图
(command "_.regen")
(princ)
)
本帖最后由 qazxswk 于 2024-9-19 23:18 编辑
414249149 发表于 2024-9-19 21:48
谢谢,解决了一个问题
后面编组是很简单的事情呀。不过很少用到编组,一般是生成块。上面的代码,我已经修改,绘制完成后给绘制对象编组。 本帖最后由 qazxswk 于 2024-9-19 23:17 编辑
修改了一下,输入命令后,可以直接画,按S键,设置新值。
(defun c:HFF( / p0 p1 p2 radius angle1 angle2 angle_diff arc1 arc2 xun ss lastent)
;; 保存当前图层
(setq current_layer (getvar "CLAYER"))
;; 创建或设置图层为“HF焊缝”,颜色为1
(if (not (tblsearch "LAYER" "HF焊缝"))
(command "_.layer" "_make" "HF焊缝" "_color" "1" "HF焊缝" "")
(setvar "CLAYER" "HF焊缝")
)
;; 保护变量设置,确保正交模式和对象捕捉开启
(setq osnap (getvar "osmode"))
(setq ortho (getvar "orthomode"))
(setvar "osmode" 3) ; 开启对象捕捉
(setvar "orthomode" 1) ; 开启正交模式
(or weld_height (setq weld_height 4)) ;;焊缝高度,默认值为4
(setq ss (ssadd))(setq lastent (entlast))
(setq xun t)
(while xun
(initget 0 "S")
;; 选择原点
(setq p0 (getpoint "\n请选择原点或[设置焊缝高度(S)]: "))
(if (= p0 "S")
(setq weld_height (getint (strcat "\n输入焊缝新高度<当前值" (rtos weld_height) ">: ")))
(setq xun nil)
))
;; 选择第1个点,不画线
(setq p1 (getpoint p0 "\n请选择第1个点: "))
;; 自动回到原点并选择第2个点,不画线
(setq p2 (getpoint p0 "\n请选择第2个点: "))
;; 计算角度
(setq angle1 (angle p0 p1))
(setq angle2 (angle p0 p2))
;; 计算角度差
(setq angle_diff (abs (- angle1 angle2)))
;; 如果角度差大于180度,则调整角度方向
(if (> angle_diff pi)
(progn
(setq temp angle1)
(setq angle1 angle2)
(setq angle2 temp)
)
)
;; 绘制以p0为圆心的半径为1到weld_height的圆弧
(setq radius 1)
(while (<= radius weld_height)
;; 创建顺时针方向的圆弧
(setq arc1 (entmakex (list
'(0 . "ARC")
(cons 10 p0) ; 圆心
(cons 40 radius) ; 半径
(cons 50 angle1) ; 起始角度
(cons 51 angle2) ; 结束角度
)))
;; 创建逆时针方向的圆弧
(setq arc2 (entmakex (list
'(0 . "ARC")
(cons 10 p0) ; 圆心
(cons 40 radius) ; 半径
(cons 50 angle2) ; 起始角度
(cons 51 angle1) ; 结束角度
)))
;; 删除较长的圆弧
(if (> (vlax-curve-getdistatparam arc1 (vlax-curve-getendparam arc1))
(vlax-curve-getdistatparam arc2 (vlax-curve-getendparam arc2)))
(entdel arc1)
(entdel arc2))
(setq radius (1+ radius))
)
(while (setq lastent(entnext lastent)) (ssadd lastent ss))
(command "-group" "C" "*" "" ss "")
;; 还原变量设置
(setvar "osmode" osnap)
(setvar "orthomode" ortho)
;; 重新生成视图
(command "_.regen")
(princ)
)
居然能把osnap当作变量…… qazxswk 发表于 2024-9-17 22:38
修改了一下,输入命令后,可以直接画,按S键,设置新值。
谢谢,解决了一个问题 qazxswk 发表于 2024-9-17 10:34
后面编组是很简单的事情呀。不过很少用到编组,一般是生成块。上面的代码,我已经修改,绘制完成后给绘制 ...
嗯,我在论坛找到一段代码把编组的问题解决了 xyp1964 发表于 2024-9-18 12:53
居然能把osnap当作变量……
菜鸟一个,请版主多多指教:lol
页:
[1]