当前位置: 首页 > news >正文

pyautocad 从弧中心修改弧长,两头缩短或者两头伸长

当前弧长为 6000.00,请输入新的弧长值: 9000
命令: 调试信息 - 当前弧长: 6000.00, 目标弧长: 9000.00
调试信息 - 当前起始角: 280.11°, 终止角: 288.50°
调试信息 - 当前角度差: 8.40°, 中间角: 284.31°
调试信息 - 新起始角: 278.01°, 新终止角: 290.60°
调试信息 - 修改后验证长度: 9000.00
成功将第 1 个圆弧的长度从 6000.00 修改为 9000.00
总共成功修改了 1 个圆弧的长度

命令: 调试信息 - 当前弧长: 9000.00, 目标弧长: 5000.00
调试信息 - 当前起始角: 278.01°, 终止角: 290.60°
调试信息 - 当前角度差: 12.60°, 中间角: 284.31°
调试信息 - 新起始角: 280.81°, 新终止角: 287.80°
调试信息 - 修改后验证长度: 5000.00
成功将第 1 个圆弧的长度从 9000.00 修改为 5000.00
总共成功修改了 1 个圆弧的长度
# modify_arc_length_fixed.py
from pyautocad import Autocad, APoint
import mathdef get_selected_arcs(acad, doc):"""获取用户选择的圆弧对象Args:acad: AutoCAD应用程序对象doc: AutoCAD文档对象Returns:list: 选中的圆弧对象列表"""try:# 提示用户选择对象print("请选择圆弧对象...")# 创建唯一名称的选择集,避免命名冲突import uuidselection_set_name = f"ArcSelection_{str(uuid.uuid4())[:8]}"selection_set = doc.SelectionSets.Add(selection_set_name)selection_set.SelectOnScreen()# 筛选出圆弧对象arcs = []if selection_set.Count > 0:for i in range(selection_set.Count):try:entity = selection_set.Item(i)if entity.ObjectName == "AcDbArc":arcs.append(entity)except Exception as e:print(f"检查对象时出错: {e}")continueprint(f"共选择 {selection_set.Count} 个对象,其中 {len(arcs)} 个为圆弧")else:print("未选择任何对象")# 清理选择集selection_set.Delete()return arcsexcept Exception as e:print(f"选择对象时出错: {e}")return []def calculate_current_arc_length(arc):"""计算当前圆弧的弧长Args:arc: AutoCAD Arc对象Returns:float: 弧长"""try:radius = arc.Radiusstart_angle = arc.StartAngleend_angle = arc.EndAngle# 计算角度差if end_angle >= start_angle:angle_diff = end_angle - start_angleelse:angle_diff = (2 * math.pi - start_angle) + end_angle# 计算弧长arc_length = radius * angle_diffreturn arc_lengthexcept Exception as e:print(f"计算圆弧长度时出错: {e}")return Nonedef modify_arc_length(arc, new_length):"""修改圆弧长度,保持中心位置不变Args:arc: AutoCAD Arc对象new_length: 新的弧长Returns:bool: 是否修改成功"""try:# 获取当前属性center = arc.Centerradius = arc.Radiuscurrent_start_angle = arc.StartAnglecurrent_end_angle = arc.EndAngle# 计算当前弧长current_length = calculate_current_arc_length(arc)if current_length is None:return Falsedoc = arc.Documentdoc.Utility.Prompt(f"调试信息 - 当前弧长: {current_length:.2f}, 目标弧长: {new_length:.2f}\n")doc.Utility.Prompt(f"调试信息 - 当前起始角: {math.degrees(current_start_angle):.2f}°, 终止角: {math.degrees(current_end_angle):.2f}°\n")# 计算新的角度差new_angle_diff = new_length / radius# 计算当前角度差和中间角度if current_end_angle >= current_start_angle:current_angle_diff = current_end_angle - current_start_anglemid_angle = (current_start_angle + current_end_angle) / 2else:current_angle_diff = (2 * math.pi - current_start_angle) + current_end_anglemid_angle = (current_start_angle + current_end_angle + 2 * math.pi) / 2if mid_angle >= 2 * math.pi:mid_angle -= 2 * math.pidoc.Utility.Prompt(f"调试信息 - 当前角度差: {math.degrees(current_angle_diff):.2f}°, 中间角: {math.degrees(mid_angle):.2f}°\n")# 计算角度变化量angle_change = new_angle_diff - current_angle_diff# 保持圆弧中心不变,两端等量缩放# 新的起始角和终止角(围绕中间角度对称调整)half_new_angle = new_angle_diff / 2new_start_angle = mid_angle - half_new_anglenew_end_angle = mid_angle + half_new_angle# 角度标准化到 [0, 2π) 范围while new_start_angle < 0:new_start_angle += 2 * math.piwhile new_start_angle >= 2 * math.pi:new_start_angle -= 2 * math.piwhile new_end_angle < 0:new_end_angle += 2 * math.piwhile new_end_angle >= 2 * math.pi:new_end_angle -= 2 * math.pidoc.Utility.Prompt(f"调试信息 - 新起始角: {math.degrees(new_start_angle):.2f}°, 新终止角: {math.degrees(new_end_angle):.2f}°\n")# 更新圆弧属性arc.StartAngle = new_start_anglearc.EndAngle = new_end_angle# 验证修改后的长度verified_length = calculate_current_arc_length(arc)doc.Utility.Prompt(f"调试信息 - 修改后验证长度: {verified_length:.2f}\n")return Trueexcept Exception as e:print(f"修改圆弧长度时出错: {e}")return Falsedef get_new_length_from_cad(doc, current_length):"""从AutoCAD界面获取新的弧长值Args:doc: AutoCAD文档对象current_length: 当前弧长(用于显示给用户)Returns:float or None: 新的弧长值,如果输入无效则返回None"""try:prompt_message = f"当前弧长为 {current_length:.2f},请输入新的弧长值: "new_length = doc.Utility.GetReal(prompt_message)if new_length <= 0:doc.Utility.Prompt("弧长必须大于0\n")return Nonereturn new_lengthexcept Exception as e:# 用户可能按了ESC键或者输入了无效值doc.Utility.Prompt(f"获取输入时出错: {e}\n")return Nonedef process_single_arc(doc, arc, index):"""处理单个圆弧的长度修改Args:doc: AutoCAD文档对象arc: AutoCAD Arc对象index: 圆弧索引号Returns:bool: 是否处理成功"""try:# 计算当前弧长current_length = calculate_current_arc_length(arc)if current_length is None:doc.Utility.Prompt(f"无法计算第 {index} 个圆弧的当前长度\n")return False# 从AutoCAD界面获取新的弧长值new_length = get_new_length_from_cad(doc, current_length)if new_length is None:return False# 修改圆弧长度if modify_arc_length(arc, new_length):# 再次计算修改后的长度以显示准确信息final_length = calculate_current_arc_length(arc)if final_length is not None:doc.Utility.Prompt(f"成功将第 {index} 个圆弧的长度从 {current_length:.2f} 修改为 {final_length:.2f}\n")else:doc.Utility.Prompt(f"成功修改第 {index} 个圆弧的长度\n")return Trueelse:doc.Utility.Prompt(f"修改第 {index} 个圆弧时出错\n")return Falseexcept Exception as e:doc.Utility.Prompt(f"处理第 {index} 个圆弧时发生错误: {e}\n")return Falsedef main():"""主函数 - 为选中的圆弧修改长度"""# 连接到正在运行的 AutoCADtry:acad = Autocad(create_if_not_exists=True)doc = acad.docdoc.Utility.Prompt(f"成功连接到 AutoCAD 文档: {doc.Name}\n")except Exception as e:print("无法连接到 AutoCAD:", e)returntry:# 获取用户选择的圆弧selected_arcs = get_selected_arcs(acad, doc)if not selected_arcs:doc.Utility.Prompt("没有选择有效的圆弧对象\n")return# 统计成功修改的数量success_count = 0# 为每个选中的圆弧修改长度for i, arc in enumerate(selected_arcs, 1):doc.Utility.Prompt(f"\n--- 处理第 {i} 个圆弧 ---\n")# 处理单个圆弧if process_single_arc(doc, arc, i):success_count += 1doc.Utility.Prompt(f"\n总共成功修改了 {success_count} 个圆弧的长度\n")except Exception as e:doc.Utility.Prompt(f"处理过程中发生错误: {e}\n")if __name__ == "__main__":main()

http://www.dtcms.com/a/619412.html

相关文章:

  • 男女激烈做羞羞事网站网站韩剧品牌策划与推广
  • 《Unity Shader》6.4.3 半兰伯特模型
  • 哪个行业最容易做网站广告自动跳转 wordpress
  • 不用wordpress建站东莞58同城招聘网
  • 最少的钱怎么做网站人才招聘网站大全
  • 网站对联广告素材wordpress主题 产品展示
  • 建设网站租用空间网站开发服务合同模板
  • 网站建设 加强宣传网站建设云解析dns有什么用
  • 在哪个网站找婚照公司湖南做网站 f磐石网络
  • 网站开发知识视频南安市住房和城乡建设局网站
  • iis6.0不能新建网站浙江网站
  • 崇信县门户网站最新留言乐都企业网站建设公司
  • 最新的域名网站河北邯郸做移动网站
  • 数据结构——四十四、平衡二叉树的删除操作(王道408)
  • LeetCode 供暖器
  • 百度一下建设银行网站首页沈阳制作公司网站和app
  • 校园二手物品交易网站开发背景图片在线设计平台
  • 山东舜玉建设工程有限公司网站临沂公司做网站
  • ASC学习笔记0025:移除所有属性集
  • 网站信息架构哈尔滨微网站建设公司哪家好
  • 岫岩做网站全球包装设计网
  • 基于COMSOL热流固耦合的二氧化碳驱替甲烷模型研究:煤层变形与孔渗变化对甲烷产量及二氧化碳封...
  • 家用无线网络设置方案
  • 大学英文网站建设十大网站黄页
  • 连云港市电信网站建设淮南市重点工程建设管理局网站
  • 省示范院校建设网站天堂 在线最新版天堂中文
  • 智能制造与工业互联网:助力企业迈向数字化未来
  • OSPF实验【实验报告】
  • 网站开发 实习报告网站建设开发哪个好学
  • ftp上传文件到网站中文建站模板