如何让图层名称和物件名称之间建立联系

有没有可以让物件名称根据图层名称改变的方法。工作中先建好图层以后 在默认图层做完操作改变物件到指定图层后,希望物件名称根据图层名称改变


试试这段代码

#coding=utf-8
import rhinoscriptsyntax as rs

objs = rs.GetObjects("选择要改名字的物体。")
if objs:
    for obj in objs:
        layer = rs.ObjectLayer(obj)
        rs.ObjectName(obj,layer)
2 个赞

完美 感谢大佬 谢谢你
想再请教一下 这段代码能默认运行或者能否自动话一点。就选择物件改变图层以后自动将物件名称给替换掉。
现在这段代码操作是先改变物件到图层以后 再二次操作改变名字。

但是这样是需要两次操作 没有一种可能是 选择物件改变图层以后然后默认执行这段代码就好


你都把椅子的各个部件图层做好了
但你还是要在默认图层建模
这是为啥呢?

这个改完图层,自动更改名字,就需要订阅事件了,我没仔细查过代码。
我那个代码,你有100个图层,你先把物件放好,直接执行代码,一次改100个物体的名字,相当于你就操作了101次。

月神的意思是,你不要改完一个图层就运行一次代码
你可以改完所有物体的图层,只运行一次代码
他会自动将你的物体名称改成物体所在图层的名称

0.0 。。 是我建模习惯还么弄好,做的时候总会在默认做好以后在调整到对应得图层

建模习惯先调节好,不要过早指望靠各种高科技和代码脚本。

高级 我怎么没想到,桀桀桀, 哎 是我自己无知了 谢谢大佬耐心讲解 感谢

嗯呢 感谢 谢谢你

嗯呢 后期努力改变 感谢大佬

之前写过一个类似的脚本,简单修改了下补充在这里。(尽管不清楚你给物件这样命名的目的是做什么 :joy:

首先你应该养成 边做模型边放置到对应图层的好习惯,在此基础上,使用该脚本可以在更改模型图层后自动为其重命名为所在图层的名称,帮你提高一点效率。

该脚本包括2个功能:修改物件图层+给物件命名

你可以把 @NARUTO 的脚本和这个脚本做成按钮的左右键,按需搭配使用。

#coding=utf-8
import rhinoscriptsyntax as rs
objs = rs.GetObjects( "选取要更改图层并重命名的物件",preselect = True)
if objs:
    rs.SelectObjects(objs)
    rs.Command("_ChangeLayer",echo = False)
    for obj in objs:
        layer = rs.ObjectLayer(obj)
        #只保留子图层名称
        layerName = rs.LayerName(layer, False)
        rs.ObjectName(obj,layerName)
print '有', str(len(objs)), '个物件被重命名为"'+layerName+ '"。'
2 个赞

是这样的,做模型时候会用到根据物件名字选择, 做图层是因为 之前经蒯神介绍在英文论坛找到可以根据图层分别导出单独文件(导出每个零件在solidworks做一点小结构和出相关图纸)
多谢大佬提供代码,大佬费心了,已经按照代码做了左右键的按钮 感谢 谢谢你

你好:根据图层分别导出单独文件,怎么弄的,?谢谢

我用Mitch Heynick的代码改了一个。希望对你有帮助。你把代码复制到rhinopython编辑器里运行就行了。

"""Exports one DXF file per layer, export folder is same as current
folder if file has been saved; otherwise, choice of file name/location.
Will use the last used export scheme as the list of available export schemes
is not currently user-accessible.  Script by Mitch Heynick 08.09.15"""

import rhinoscriptsyntax as rs
import scriptcontext as sc
import os

def BatchExportByLayer():
    doc_name=sc.doc.Name
    ft="3dm"
    filt = "{} Files (*.{})|*.{}||".format(ft,ft.lower(),ft.lower())
    if not doc_name:
        #document hasn't been saved
        msg="Main file name/folder for {} export?".format(ft)
        filename=rs.SaveFileName(msg, filt)
        #SaveFileName returns the complete path plus file name
        if filename==None: return
    else:
        #document has been saved, get path
        msg="Folder for {} export? (Enter to save in current folder)".format(ft)
        folder = rs.BrowseForFolder(rs.WorkingFolder(), msg)
        if not folder: return
        filename=os.path.join(folder,doc_name)
    
    #start the export sequence
    rs.EnableRedraw(False)
    layers=rs.LayerNames()
    for layer in layers:
        if rs.IsLayerSelectable(layer):
            #need to check for sublayers in name and replace "::"
            layer_name=layer.replace("::","_")
            e_file_name = '"{}-{}.{}" '.format(filename[:-4],layer_name,ft.lower())
            rs.UnselectAllObjects()
            rs.ObjectsByLayer(layer, True)
            if rs.SelectedObjects():
                #runs the export using the file name/path and your settings
                rs.Command("-_Export "+e_file_name+" _Enter", False)
        
    rs.EnableRedraw(True)

BatchExportByLayer()
3 个赞

谢谢谢谢,我看看 学习