本文最后更新于 2025-02-28,文章内容可能已经过时。

使用VEX语言

在maya同时导出大量相同模型中,将不同的path值提取相同部分,并赋值给自定义属性“modelName”,并根据“modelName”属性程序化批量删出大量相同模型的相同部分!建议在abc模型解包前使用,优化运算速度!!!chatgpt拯救世界( •̀ ω •́ )y

int numPrims = nprimitives(0); // 获取当前几何体的原语数量

// 循环遍历每个原语
for (int primnum = 0; primnum < numPrims; ++primnum) {
    // 获取当前原语的模型路径
    string modelPath = prim(0, "path", primnum);

    // 初始化变量以保存模型名称
    string modelName = "";

    // 获取模型路径中最后一个斜杠的位置
    int lastSlash = 0;
    for (int i = strlen(modelPath) - 1; i >= 0; --i) {
        if (modelPath[i] == ':') {
            lastSlash = i;
            break;
        }
    }

    // 从最后一个斜杠开始记录模型名称
    for (int i = lastSlash + 1; i < strlen(modelPath); ++i) {
        modelName += modelPath[i];
    }

    // 输出结果(可选,用于检查)
    printf("Original Path: %s\n", modelPath);
    printf("Extracted Model Name: %s\n", modelName);

    // 将模型名称设置为自定义属性,无法直接修改文件路径
    setprimattrib(0, "modelName", primnum, modelName);

    // 输出修改后的路径(可选,用于检查)
    printf("Modified Path: %s\n", modelPath);
}
  1. nprimitives(0): 获取当前几何体的原语数量。
  2. for (int primnum = 0; primnum < numPrims; ++primnum): 通过循环遍历每个原语。
  3. string modelPath = prim(0, "path", primnum);: 获取当前原语的模型路径。prim 函数用于获取原语的属性,第一个参数表示几何体索引,第二个参数表示属性名称,第三个参数表示原语索引。
  4. 初始化变量 modelName 用于保存模型名称。
  5. 找到模型路径中最后一个冒号的位置。int lastColon = 0; 初始化 lastColon 变量,然后通过反向循环找到模型路径中最后一个冒号的位置。
  6. 从最后一个冒号开始记录模型名称。通过循环,从最后一个冒号的下一个位置开始将字符逐个添加到 modelName 变量中。
  7. 输出结果,用于检查和调试。这里输出原始路径、提取的模型名称以及修改后的路径。
  8. setprimattrib(0, "modelName", primnum, modelName);: 将模型名称设置为自定义属性。setprimattrib 函数用于设置原语的属性,第一个参数表示几何体索引,第二个参数表示属性名称,第三个参数表示原语索引,第四个参数表示要设置的值。
  9. 输出修改后的路径,用于检查。
    批量删出相同模型1

手动删除

批量删出相同模型3

使用path值删出一个部位,然后将所有代表模型名称序号的部分改为*
批量删出相同模型5