【Rhino】【Python】Replace specified context of text object批量替换文字对象的指定内容

在Rhino中批量修改文字对象内容的Python脚本

在Rhino中,有时需要批量修改文字对象的内容。手动操作不仅耗时,而且容易出错。幸运的是,通过Python脚本,我们可以高效地完成这项任务。以下是一个示例脚本,展示了如何在Rhino中批量修改文字对象的内容,并详细介绍了其中的Python方法和功能。

脚本代码

# coding=utf-8
import rhinoscriptsyntax as rs

def batch_modify_text_objects(old_text, new_text):
    # 获取所有对象
    objects = rs.AllObjects()
    if not objects:
        print("No objects found in the document.")
        return
    
    modified_count = 0
    
    for obj in objects:
        # 检查对象是否为文字对象
        if rs.IsText(obj):
            text = rs.TextObjectText(obj)
            # 如果文字对象的内容为指定的旧文本,则修改为新文本
            if text == old_text:
                rs.TextObjectText(obj, new_text)
                rs.SelectObject(obj)
                modified_count += 1
    
    print("Modified {} text object(s) from '{}' to '{}'.".format(modified_count, old_text, new_text))

# 设置旧文本和新文本
old_text = "(900x1200)"
new_text = "(1200x900)"

# 运行修改函数
batch_modify_text_objects(old_text, new_text)

主要功能介绍

1. 导入 rhinoscriptsyntax 模块
import rhinoscriptsyntax as rs

rhinoscriptsyntax 是Rhino提供的一个Python库,包含了许多用于操作Rhino文档的函数。通过导入这个模块,我们可以使用其中的各种方法来操作Rhino中的对象。

2. 定义批量修改文字对象内容的函数
def batch_modify_text_objects(old_text, new_text):

这个函数接受两个参数:old_textnew_text,分别表示需要查找的旧文本和要替换的新文本。

3. 获取所有对象
objects = rs.AllObjects()
if not objects:
    print("No objects found in the document.")
    return

rs.AllObjects() 方法返回文档中的所有对象。如果文档中没有对象,这段代码会输出一条信息并结束函数的执行。

4. 遍历所有对象并修改文字内容
modified_count = 0

for obj in objects:
    if rs.IsText(obj):
        text = rs.TextObjectText(obj)
        if text == old_text:
            rs.TextObjectText(obj, new_text)
            rs.SelectObject(obj)
            modified_count += 1
  • rs.IsText(obj): 检查对象是否为文字对象。
  • rs.TextObjectText(obj): 获取文字对象的内容。
  • rs.TextObjectText(obj, new_text): 设置文字对象的内容为新的文本。
  • rs.SelectObject(obj): 选择修改过的文字对象。
  • modified_count: 记录被修改的文字对象的数量。
5. 输出修改结果
print("Modified {} text object(s) from '{}' to '{}'.".format(modified_count, old_text, new_text))

使用 format() 方法格式化输出字符串,打印被修改的文字对象数量以及旧文本和新文本内容。

6. 设置旧文本和新文本,并运行函数
old_text = "(900x1200)"
new_text = "(1200x900)"

batch_modify_text_objects(old_text, new_text)

设置需要查找的旧文本和要替换的新文本,然后调用 batch_modify_text_objects 函数来执行批量修改操作。

运行脚本

  1. 打开Rhino,然后按 Alt + F11 打开Python脚本编辑器。
  2. 将上述代码粘贴到编辑器中。
  3. 运行脚本,所有内容为 old_text(如“(900x1200)”)的文字对象将被选中并更改为 new_text(如“(1200x900)”)。

改进:模糊匹配,old_text包含该字段即可


# coding=utf-8
import rhinoscriptsyntax as rs

def batch_modify_text_objects(old_text, new_text):
    # 获取所有对象
    objects = rs.AllObjects()
    if not objects:
        print("No objects found in the document.")
        return
    
    modified_count = 0
    
    for obj in objects:
        # 检查对象是否为文字对象
        if rs.IsText(obj):
            text = rs.TextObjectText(obj)
            # 如果文字对象的内容包含指定的旧文本片段,则修改为新文本
            if old_text in text:
                rs.TextObjectText(obj, new_text)
                rs.SelectObject(obj)
                modified_count += 1
    
    print("Modified {} text object(s) containing '{}' to '{}'.".format(modified_count, old_text, new_text))

# 设置旧文本和新文本
old_text = "B900X900)"
new_text = "(900x900)"

# 运行修改函数
batch_modify_text_objects(old_text, new_text)

总结

通过这个简单的Python脚本,我们可以高效地在Rhino中批量修改文字对象的内容。这个脚本利用了 rhinoscriptsyntax 模块中的多个方法,如 rs.AllObjects()rs.IsText()rs.TextObjectText(),使得批量操作变得简单易行

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hmywillstronger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值