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

Python:Spoonfed - (2-10) 激励选择脚本(搬砖)

https://www.patreon.com/posts/python-spoonfed-31572219

2019年11月15日

利用上一课的选择函数,我们现在可以拼凑出一些脚本(有一些事情我们还没有解释,但应该很容易理解)。以下代码将允许您选择当前所选对象的父对象、顶级对象、同级对象、表兄弟对象或子对象。这些功能的一部分过去已包含在 Cineversity 中,但在这里您可以获取它们,包括源代码。

我们先从Parent的选择开始。PS_SelectObject_Parent.py

import c4ddef SetActiveObjects(objlist):cleared = Falsefor obj in objlist:if not cleared:doc.SetActiveObject(obj, c4d.SELECTION_NEW)cleared = Trueelse:doc.SetActiveObject(obj, c4d.SELECTION_ADD)def main():if doc == None: returnactiveObjectList = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)if not activeObjectList: returnnewSelection = []for obj in activeObjectList:if obj.GetUp() != None:newSelection += [obj.GetUp()]else:newSelection += [obj]SetActiveObjects(newSelection)c4d.EventAdd()if __name__=='__main__':main()

在这里,我们将函数 SetActiveObjects() 添加到 API 中的选择设置函数数量中。由于给定的函数 只能选择一个BaseObject 一次 ,因此我们在这里封装SetActiveObject() 并允许传递整个列表。

唯一的技巧是,我们必须使用标志 SELECTION_NEW 设置第一个对象以清除 以前的 设置其他每个对象 选择,但必须使用SELECTION_ADD 。为此,我们使用一个布尔变量 清除 开始 ,它从False 设置为 True ,并在第一次有机会时 保持True )。 (此后一直

在函数 main() 循环中迭代当前选择 中,我们在for ,获取每个对象的直接父对象并将其添加到新选择中。如果没有父对象,则将添加对象本身(本质上保持选中状态)。

newSelection 是一个列表对象。 文字初始化为空列表 它由[ ] 。要添加对象,我们首先通过再次将对象括在方括号中来创建一个列表,其中包含该对象中的一项。 将此迷你列表附加到现有列表 可以使用扩展赋值+=

第二个脚本基本相同,但它不是寻找直接父代,而是寻找最顶层的祖先。这是在 while 循环中完成的: PS_SelectObject_Top.py

import c4ddef SetActiveObjects(objlist):cleared = Falsefor obj in objlist:if not cleared:doc.SetActiveObject(obj, c4d.SELECTION_NEW)cleared = Trueelse:doc.SetActiveObject(obj, c4d.SELECTION_ADD)def main():if doc == None: returnactiveObjectList = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)if not activeObjectList: returnnewSelection = []for obj in activeObjectList:while obj.GetUp() != None:obj = obj.GetUp()newSelection += [obj]SetActiveObjects(newSelection)c4d.EventAdd()if __name__=='__main__':main()

我们不需要额外的情况来包含 obj 请注意,如果没有祖先, 循环 本身。在这种情况下,while 结束 本身在obj 处

如果我们在最初的选择中有两个兄弟姐妹会怎样?难道我们不会为两者获得相同的父级或祖先,并且有一个包含重复元素的列表可供选择吗? -- 确实如此,但没关系:将对象设置为活动 两次 不会产生不良影响,因此我们不需要经历整理重复项的麻烦。PS_SelectObject_Siblings.py

import c4ddef SetActiveObjects(objlist):cleared = Falsefor obj in objlist:if not cleared:doc.SetActiveObject(obj, c4d.SELECTION_NEW)cleared = Trueelse:doc.SetActiveObject(obj, c4d.SELECTION_ADD)def SelectSiblings(startobj):global newSelectionif startobj == None: returnnewSelection += [startobj]obj = startobjwhile obj.GetPred() != None:newSelection += [obj.GetPred()]obj = obj.GetPred()obj = startobjwhile obj.GetNext() != None:newSelection += [obj.GetNext()]obj = obj.GetNext()def main():global newSelectionif doc == None: returnactiveObjectList = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)if not activeObjectList: returnnewSelection = []for obj in activeObjectList:SelectSiblings(obj)SetActiveObjects(newSelection)c4d.EventAdd()if __name__=='__main__':main()

在第三个脚本(选择最初选定对象的所有同级)中,我们引入了一个新函数 SelectSiblings() 。这将获取一个 BaseObject ,并将该对象本身及其所有同级添加到共享全局列表 newSelection 中 。 它通过从参数对象走到列表的前面,然后再次从参数对象走到列表的后面来实现这一点。

我们只调用 SelectSiblings 一次,因此我们可能直接保留该代码而不是函数调用(这种做法也称为 内联代码 )。 函数 但是,分离出SetActiveObjects SelectSiblings 使代码更清晰、更易于阅读 - 而且,我们可以为最后两个脚本重用相同的结构。PS_SelectObject_Cousins.py

import c4ddef SetActiveObjects(objlist):cleared = Falsefor obj in objlist:if not cleared:doc.SetActiveObject(obj, c4d.SELECTION_NEW)cleared = Trueelse:doc.SetActiveObject(obj, c4d.SELECTION_ADD)def SelectSiblings(startobj):global newSelectionif startobj == None: returnnewSelection += [startobj]obj = startobjwhile obj.GetPred() != None:newSelection += [obj.GetPred()]obj = obj.GetPred()obj = startobjwhile obj.GetNext() != None:newSelection += [obj.GetNext()]obj = obj.GetNext()def main():global newSelectionif doc == None: returnactiveObjectList = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)if not activeObjectList: returnnewSelection = []for obj in activeObjectList:if obj.GetUp() == None:SelectSiblings(obj)else:parent = obj.GetUp()while parent.GetPred() != None:parent = parent.GetPred()while parent != None:SelectSiblings(parent.GetDown())parent = parent.GetNext()SetActiveObjects(newSelection)c4d.EventAdd()if __name__=='__main__':main()

第四个脚本不仅选择兄弟姐妹,还选择最初选择的对象的“表兄弟”。在这种情况下,“表兄弟”是父母的兄弟姐妹的子对象。为了找到这些,代码首先上一层,然后从头到尾遍历这一层,将所有节点的所有子节点添加到选择中。如果没有父母,代码只会添加兄弟姐妹。

第五个也是最后一个选择器脚本选择最初选定对象的子对象:PS_SelectObject_Children

import c4ddef SetActiveObjects(objlist):cleared = Falsefor obj in objlist:if not cleared:doc.SetActiveObject(obj, c4d.SELECTION_NEW)cleared = Trueelse:doc.SetActiveObject(obj, c4d.SELECTION_ADD)def main():if doc == None: returnactiveObjectList = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)if not activeObjectList: returnnewSelection = []for obj in activeObjectList:if obj.GetUp() != None:newSelection += [obj.GetUp()]else:newSelection += [obj]SetActiveObjects(newSelection)c4d.EventAdd()if __name__=='__main__':main()

这与 Cinema 4D 的内置功能“选择子项”不同,因为该功能会选择所有依赖子树直至最低级别。相反,脚本仅限于 直接 子对象(如果没有子对象,甚至是原始对象)。

我没有包含像 C4D 的“选择子项”(无论如何应该命名为“选择子树”)这样的功能,因为该功能已经可用。

一点作业:如果所需的目标对象(父对象、顶级对象、兄弟姐妹、子对象、表兄弟)不可用,则所有五个脚本都会保留最初选择的对象。您可能想要更改该行为,以便不再选择最初选择的对象。在什么情况下这才有意义?这容易实现吗?

相关文章:

Python:Spoonfed - (2-10) 激励选择脚本(搬砖)

https://www.patreon.com/posts/python-spoonfed-31572219 2019年11月15日 利用上一课的选择函数,我们现在可以拼凑出一些脚本(有一些事情我们还没有解释,但应该很容易理解)。以下代码将允许您选择当前所选对象的父对象、顶级对…...

VS Code Python 文件导入提示 xxx Module 不存在解决方式

VS Code Python 文件导入提示 xxx Module 不存在解决方式 引言正文如何打开 setting.json 文件引言 之前在 https://blog.csdn.net/u011699626/article/details/142612579?spm=1001.2014.3001.5501 一文中我们介绍了如何配置 VS code 中 Jupyter Notebook 的文件导入环境,这…...

Android中的Activity与Fragment:深入解析与应用场景

在Android应用开发中,Activity和Fragment是两个核心概念,它们各自扮演着不同的角色,共同构成了用户界面的基础。理解并熟练掌握这两个组件的使用,对于开发高效、灵活且用户友好的Android应用至关重要。本文将深入解析Activity与Fr…...

Flux【lora模型】【真人模型】:极致逼真,小红书真实风格|旅游拍照|景点打卡

大家好我是安琪!!! 今天和大家推荐一款基于Flux训练的真人写实的lora模型:Flux_小红书真实风格丨日常照片丨极致逼真。一看这个模型的命名,就可以猜测出以小红书日常真实拍摄的照片为数据集训练而来,该模型…...

python基础语法--顺序结构

Python中的顺序结构主要包括流程控制语句,如 if、while 和 for 语句。这些语句允许你在程序中定义不同的执行路径,从而根据条件或循环次数来改变代码的执行流程。下面详细介绍这些语句的使用方法和示例。 if 语句 if 语句用于根据某个条件来决定是否执…...

软件游戏运行缺少vcruntime140.dll怎么办?总结四种有效简单方法

1. 文件基本信息 1.1 定义与作用 vcruntime140.dll是Microsoft Visual C 2015 Redistributable Package的一部分,它包含了C运行时库,用于支持使用Visual C开发的Windows应用程序。这个动态链接库(DLL)文件提供了程序执行时所需的…...

(undone) 阅读 MapReduce 论文笔记

参考:https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf 摘要:简单介绍了 MapReduce 是在大型分布式系统上工作的 Introduction 的内容总结: 1.介绍背景:为什么我们需要分布式系统?MapReduce 的意义是哪些 2.简…...

sql注入工具升级:自动化时间盲注、布尔盲注

项目地址:https://github.com/iamnotamaster/sql-injecter 给我之前写的sql注入脚本进行了一些升级,此文章就是对升级内容的分析,升级内容如下: 使用占位符foo来填充payload里需要经常修改的部分 自动判断循环 支持爆破和二分查…...

字节C++抖音直播一面-面经总结

1、Python和C的区别,Python的程序执行过程是怎样的?C和C呢? 解释型-编译型 不用分号-用分号 自动垃圾回收-delete 相对较慢-执行速度快 丰富的库-标注模板库 .py-解释器-字节码-PVM-输出结果 c-c with class malloc-new 标准库-STL 不重载-函数重载和…...

浅谈stm32的GPIO引脚配置模式

STM32的GPIO(通用输入输出)引脚可以被配置为多种模式,以适应不同的应用场景。下面介绍一些一些常见的STM32 GPIO引脚模式: 模拟输入模式(Analog Input Mode):在这种模式下,GPIO引脚被…...

Meta Orion 原型的生产成本约为 10,000 美元

Orion Meta 是一项突破性的增强现实项目,展示了其迄今为止最先进的原型。经过多年的研究和数百万美元的开发,Meta 打造出了一款仅重 98 克的增强现实眼镜,能够将全息图投射到视线范围内的任何地方。这款眼镜由一个先进的输入系统驱动&#xf…...

MATLAB GUI设计原则与实践

MATLAB的图形用户界面(GUI)设计是一种强大的工具,用于创建交互式应用程序。良好的GUI设计不仅能够提升用户体验,还能提高应用程序的可用性和效率。本文将探讨MATLAB GUI设计的原则,并提供一些实用的代码示例。 1. GUI…...

电脑桌面显示不完整

UOS统信由于误操作,导致桌面放大了,桌面显示不完整,本文主要介绍如何恢复到正常的桌面。 文章目录 一、问题描述二、解决方案 一、问题描述 电脑使用过程中出现显示器只能显示部分画面,桌面图标异常变大,桌面随鼠标移…...

Spring Boot与观察者模式实现数据同步更新机制

在Spring Boot应用程序中实现观察者模式来同步更新数据是一种强大的设计方式,它可以帮助你构建响应式和松耦合的应用程序。观察者模式通常用于当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的基本概念 •Subject(被观察者):维护了一个…...

毕业设计选题:基于ssm+vue+uniapp的校园订餐小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...

每日OJ题_牛客_HJ108求最小公倍数_C++_Java

目录 牛客_HJ108求最小公倍数_C_Java 题目解析 C代码 Java代码 牛客_HJ108求最小公倍数_C_Java 求最小公倍数_牛客题霸_牛客网 题目解析 A 和 B 的最小公倍数 A * B / 两者的最大公约数。最大公约数&#xff1a;辗转相除法。 C代码 #include <iostream> #includ…...

【项目总结】工程构建思路分析与分享

背景 写这篇文章的初衷是因为国产化项目临近结束&#xff0c;在做项目总结时&#xff0c;回想起了代码管理的相关问题。虽然工程搭建及管理是一个高级工程师必备的能力&#xff0c;但似乎每次一个新项目立项&#xff0c;都是从老的项目中拷贝工程框架&#xff0c;再进行定制修…...

3、AI测试辅助-测试计划编写(自动生成任务甘特图)

AI测试辅助-测试计划编写 一、创建测试计划1.1 使用ChatGpt生成测试计划1.1.1 测试计划细化-测试任务排期1.1.2 测试计划细化-利用plantuml输出甘特图&#xff08;不推荐&#xff09;1.1.3 测试计划细化-利用mermaid 生成甘特图&#xff08;推荐&#xff09; 一、创建测试计划 …...

MySQL:进阶巩固-触发器

目录 一、基本概述二、语法结构三、基本使用3.1 新增的触发器3.2 修改的触发器3.3 删除的触发器 一、基本概述 触发器是与表有关的数据对象&#xff0c;在INSERT/UPDATE/DELETE之前或者是之后&#xff0c;触发并执行触发器中定义的SQL语句的集合&#xff0c;触发器的这种特性可…...

python获取百度地图路径规划

自制语音助手想做一个查询交通路线的功能&#xff0c;于是就想到了百度地图。在百度地图的服务器端应用中&#xff0c;提供了“轻量级路线规划”API接口&#xff0c;正好可以满足需求。要用这个接口&#xff0c;需要注册百度地图账号并创建一个服务器端的应用。有关开通百度地图…...

从YAML到PyTorch模型:拆解Ultralytics YOLO V8/V11中`parse_model`函数的完整工作流

从YAML到PyTorch模型&#xff1a;拆解Ultralytics YOLO V8/V11中parse_model函数的完整工作流 在计算机视觉领域&#xff0c;YOLO系列模型因其卓越的实时检测性能而广受开发者青睐。Ultralytics团队推出的YOLO V8/V11版本不仅延续了这一优势&#xff0c;更通过精心设计的配置文…...

[特殊字符]空间智能目标追踪系统:从“看视频”到“掌控空间”的技术跃迁——多模态识别 × 空间建模 × 轨迹预测,让视频系统具备“感知与决策能力”[特殊字符] 视频系统的终极形态,不是记录世

&#x1f6a8;空间智能目标追踪系统&#xff1a;从“看视频”到“掌控空间”的技术跃迁——多模态识别 空间建模 轨迹预测&#xff0c;让视频系统具备“感知与决策能力”&#x1f4a5; 视频系统的终极形态&#xff0c;不是记录世界&#xff0c;而是理解世界。一、系统定位&am…...

Stable Diffusion像素艺术工作站:Pixel Fashion Atelier支持LoRA在线热切换

Stable Diffusion像素艺术工作站&#xff1a;Pixel Fashion Atelier支持LoRA在线热切换 1. 像素时装锻造坊简介 Pixel Fashion Atelier是一款基于Stable Diffusion与Anything-v5的图像生成工作站&#xff0c;专为像素艺术创作而设计。与传统AI工具不同&#xff0c;它采用了复…...

macOS 环境下的 Fugu14 越狱实战:从环境配置到 Unc0ver 完美激活

1. 准备工作&#xff1a;搭建macOS越狱环境 在开始Fugu14越狱之前&#xff0c;我们需要确保macOS环境配置完善。我实测发现&#xff0c;很多新手卡在第一步环境搭建&#xff0c;其实只要按顺序完成这些准备&#xff0c;后面流程会顺利很多。 首先需要安装Python 3.8或更高版本…...

uniapp圆环进度条组件实战:从零到一打造个性化数据展示

Uniapp圆环进度条组件实战&#xff1a;从零到一打造个性化数据展示 在移动应用开发中&#xff0c;数据可视化是提升用户体验的关键因素之一。圆环进度条作为一种直观的数据展示方式&#xff0c;广泛应用于健身追踪、学习进度、任务完成度等场景。Uniapp作为跨平台开发框架&…...

美国是如何对GEO进行监管的?

一、GEO投毒并不是中国独有 2026年央视“315”晚会首次把“GEO投毒”这一灰色产业链推到台前。所谓“投毒”&#xff0c;说白了&#xff0c;就是有人通过批量制造虚假信息、污染训练或检索数据&#xff0c;去干扰AI的推荐和回答结果&#xff0c;最后把一些虚假、低质甚至根本不…...

Python多线程真能并行了吗?(GIL绕过技术全图谱:subprocess/numba/multiprocessing/cython/rustpy)

第一章&#xff1a;Python无锁GIL环境下的并发模型面试题汇总Python 的全局解释器锁&#xff08;GIL&#xff09;长期被视为多线程并发的瓶颈&#xff0c;但近年来随着 CPython 3.13 引入实验性无锁 GIL&#xff08;--without-pymalloc 配合 --with-per-object-gil 原型&#x…...

Dify 文本语意识别与智能补全实战指南

1. 认识Dify平台与文本语意识别 第一次接触Dify时&#xff0c;我就被它的"零代码"特性惊艳到了。这个平台把复杂的AI能力封装成了像搭积木一样简单的模块&#xff0c;特别是它的文本语意识别功能&#xff0c;能准确理解用户输入的半句话甚至几个关键词。比如用户输入…...

GLM-OCR模型安装包制作:将模型与服务打包成可执行文件

GLM-OCR模型安装包制作&#xff1a;将模型与服务打包成可执行文件 你是不是也遇到过这样的情况&#xff1f;自己好不容易把一个AI模型跑起来了&#xff0c;效果也不错&#xff0c;想分享给同事或者朋友用用&#xff0c;结果对方光是配环境、装依赖就折腾了半天&#xff0c;最后…...

【悬疑言情小说推荐】《血语玫瑰》

​​​​​​《血语玫瑰》国际标准书号&#xff1a;ISBN&#xff1a;978-986-6364-30-3 作者:追月逐花 本书地址&#xff1a;http://e.dangdang.com/products/1901197341.html 每个女孩都期待男友年轻英俊、家境优渥、学识出众&#xff0c;而 “魔鬼” 恰好符合所有条件&…...