明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 477|回复: 7

[讨论] 求助,实现不按回车按默认绘制

[复制链接]
发表于 2024-9-17 10:34:35 | 显示全部楼层 |阅读模式
10明经币
求助,希望大神帮忙修改下代码
要求:
1、输入命令后不按回车即可按默认值去绘制/输入自定义值按回车后绘制
2、绘制完成后给绘制对象编组

  1. (defun c:HFF ( / p0 p1 p2 radius angle1 angle2 angle_diff arc1 arc2 weld_height)
  2.   ;; 保存当前图层
  3.   (setq current_layer (getvar "CLAYER"))
  4.   
  5.   ;; 创建或设置图层为“HF焊缝”,颜色为1
  6.   (if (not (tblsearch "LAYER" "HF焊缝"))
  7.     (command "_.layer" "_make" "HF焊缝" "_color" "1" "HF焊缝" "")
  8.     (setvar "CLAYER" "HF焊缝")
  9.   )

  10.   ;; 保护变量设置,确保正交模式和对象捕捉开启
  11.   (setq osnap (getvar "osmode"))
  12.   (setq ortho (getvar "orthomode"))
  13.   (setvar "osmode" 3) ; 开启对象捕捉
  14.   (setvar "orthomode" 1) ; 开启正交模式

  15.   ;; 提示输入焊缝高度,默认值为4
  16.   (setq weld_height (getint "\n指定焊缝剖面角点或直接输入焊缝高度<默认4>: "))
  17.   (if (null weld_height) (setq weld_height 4))

  18.   ;; 选择原点
  19.   (setq p0 (getpoint "\n请选择原点: "))
  20.   
  21.   ;; 选择第1个点,不画线
  22.   (setq p1 (getpoint p0 "\n请选择第1个点: "))
  23.   
  24.   ;; 自动回到原点并选择第2个点,不画线
  25.   (setq p2 (getpoint p0 "\n请选择第2个点: "))

  26.   ;; 计算角度
  27.   (setq angle1 (angle p0 p1))
  28.   (setq angle2 (angle p0 p2))

  29.   ;; 计算角度差
  30.   (setq angle_diff (abs (- angle1 angle2)))

  31.   ;; 如果角度差大于180度,则调整角度方向
  32.   (if (> angle_diff pi)
  33.     (progn
  34.       (setq temp angle1)
  35.       (setq angle1 angle2)
  36.       (setq angle2 temp)
  37.     )
  38.   )

  39.   ;; 绘制以p0为圆心的半径为1到weld_height的圆弧
  40.   (setq radius 1)
  41.   (while (<= radius weld_height)
  42.     ;; 创建顺时针方向的圆弧
  43.     (setq arc1 (entmakex (list
  44.                            '(0 . "ARC")
  45.                            (cons 10 p0)            ; 圆心
  46.                            (cons 40 radius)        ; 半径
  47.                            (cons 50 angle1)        ; 起始角度
  48.                            (cons 51 angle2)        ; 结束角度
  49.                          )))
  50.    
  51.     ;; 创建逆时针方向的圆弧
  52.     (setq arc2 (entmakex (list
  53.                            '(0 . "ARC")
  54.                            (cons 10 p0)            ; 圆心
  55.                            (cons 40 radius)        ; 半径
  56.                            (cons 50 angle2)        ; 起始角度
  57.                            (cons 51 angle1)        ; 结束角度
  58.                          )))
  59.    
  60.     ;; 删除较长的圆弧
  61.     (if (> (vlax-curve-getdistatparam arc1 (vlax-curve-getendparam arc1))
  62.            (vlax-curve-getdistatparam arc2 (vlax-curve-getendparam arc2)))
  63.       (entdel arc1)
  64.       (entdel arc2))

  65.     (setq radius (1+ radius))
  66.   )

  67.   ;; 还原变量设置
  68.   (setvar "osmode" osnap)
  69.   (setvar "orthomode" ortho)

  70.   ;; 重新生成视图
  71.   (command "_.regen")
  72.   (princ)
  73. )


最佳答案

查看完整内容

后面编组是很简单的事情呀。不过很少用到编组,一般是生成块。上面的代码,我已经修改,绘制完成后给绘制对象编组。

点评

最好加个dwg文件  发表于 2024-9-17 11:38
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-9-17 10:34:36 | 显示全部楼层
本帖最后由 qazxswk 于 2024-9-19 23:18 编辑
414249149 发表于 2024-9-19 21:48
谢谢,解决了一个问题

后面编组是很简单的事情呀。不过很少用到编组,一般是生成块。上面的代码,我已经修改,绘制完成后给绘制对象编组。
回复

使用道具 举报

发表于 2024-9-17 22:38:29 | 显示全部楼层
本帖最后由 qazxswk 于 2024-9-19 23:17 编辑

修改了一下,输入命令后,可以直接画,按S键,设置新值。


  1. (defun c:HFF( / p0 p1 p2 radius angle1 angle2 angle_diff arc1 arc2 xun ss lastent)
  2.   ;; 保存当前图层
  3.   (setq current_layer (getvar "CLAYER"))
  4.   
  5.   ;; 创建或设置图层为“HF焊缝”,颜色为1
  6.   (if (not (tblsearch "LAYER" "HF焊缝"))
  7.     (command "_.layer" "_make" "HF焊缝" "_color" "1" "HF焊缝" "")
  8.     (setvar "CLAYER" "HF焊缝")
  9.   )

  10.   ;; 保护变量设置,确保正交模式和对象捕捉开启
  11.   (setq osnap (getvar "osmode"))
  12.   (setq ortho (getvar "orthomode"))
  13.   (setvar "osmode" 3) ; 开启对象捕捉
  14.   (setvar "orthomode" 1) ; 开启正交模式
  15.   (or weld_height (setq weld_height 4)) ;;焊缝高度,默认值为4
  16.   (setq ss (ssadd))(setq lastent (entlast))
  17.   (setq xun t)
  18.   (while xun
  19.   (initget 0 "S")
  20.     ;; 选择原点
  21.   (setq p0 (getpoint "\n请选择原点或[设置焊缝高度(S)]: "))
  22.   (if (= p0 "S")
  23.     (setq weld_height (getint (strcat "\n输入焊缝新高度<当前值" (rtos weld_height) ">: ")))
  24.    (setq xun nil)
  25.   ))
  26.   ;; 选择第1个点,不画线
  27.   (setq p1 (getpoint p0 "\n请选择第1个点: "))
  28.   
  29.   ;; 自动回到原点并选择第2个点,不画线
  30.   (setq p2 (getpoint p0 "\n请选择第2个点: "))

  31.   ;; 计算角度
  32.   (setq angle1 (angle p0 p1))
  33.   (setq angle2 (angle p0 p2))

  34.   ;; 计算角度差
  35.   (setq angle_diff (abs (- angle1 angle2)))

  36.   ;; 如果角度差大于180度,则调整角度方向
  37.   (if (> angle_diff pi)
  38.     (progn
  39.       (setq temp angle1)
  40.       (setq angle1 angle2)
  41.       (setq angle2 temp)
  42.     )
  43.   )

  44.   ;; 绘制以p0为圆心的半径为1到weld_height的圆弧
  45.   (setq radius 1)
  46.   (while (<= radius weld_height)
  47.     ;; 创建顺时针方向的圆弧
  48.     (setq arc1 (entmakex (list
  49.                            '(0 . "ARC")
  50.                            (cons 10 p0)            ; 圆心
  51.                            (cons 40 radius)        ; 半径
  52.                            (cons 50 angle1)        ; 起始角度
  53.                            (cons 51 angle2)        ; 结束角度
  54.                          )))
  55.    
  56.     ;; 创建逆时针方向的圆弧
  57.     (setq arc2 (entmakex (list
  58.                            '(0 . "ARC")
  59.                            (cons 10 p0)            ; 圆心
  60.                            (cons 40 radius)        ; 半径
  61.                            (cons 50 angle2)        ; 起始角度
  62.                            (cons 51 angle1)        ; 结束角度
  63.                          )))
  64.    
  65.     ;; 删除较长的圆弧
  66.     (if (> (vlax-curve-getdistatparam arc1 (vlax-curve-getendparam arc1))
  67.            (vlax-curve-getdistatparam arc2 (vlax-curve-getendparam arc2)))
  68.       (entdel arc1)
  69.       (entdel arc2))

  70.     (setq radius (1+ radius))
  71.   )
  72.   (while (setq lastent  (entnext lastent)) (ssadd lastent ss))
  73.   (command "-group" "C" "*" "" ss "")
  74.   ;; 还原变量设置
  75.   (setvar "osmode" osnap)
  76.   (setvar "orthomode" ortho)

  77.   ;; 重新生成视图
  78.   (command "_.regen")
  79.    (princ)
  80. )


回复

使用道具 举报

发表于 2024-9-18 12:53:29 | 显示全部楼层
居然能把osnap当作变量……
回复

使用道具 举报

 楼主| 发表于 2024-9-19 21:48:24 | 显示全部楼层
qazxswk 发表于 2024-9-17 22:38
修改了一下,输入命令后,可以直接画,按S键,设置新值。

谢谢,解决了一个问题
回复

使用道具 举报

 楼主| 发表于 2024-9-19 23:50:15 | 显示全部楼层
qazxswk 发表于 2024-9-17 10:34
后面编组是很简单的事情呀。不过很少用到编组,一般是生成块。上面的代码,我已经修改,绘制完成后给绘制 ...

嗯,我在论坛找到一段代码把编组的问题解决了
回复

使用道具 举报

 楼主| 发表于 2024-9-20 10:24:58 | 显示全部楼层
xyp1964 发表于 2024-9-18 12:53
居然能把osnap当作变量……

菜鸟一个,请版主多多指教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:55 , Processed in 0.186885 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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