
Python
文章平均质量分 64
lulongfei172006
为自己每一个脚印、每一滴汗水刻碑
展开
-
顺时针打印矩阵
这是leetcode上面的一道题,自己试着做下:def print_array_spirally(array): row = len(array) column = len(array[0]) res = list() directions = [[1, 0], [0, 1], [-1, 0], [0, -1]] visited = [[False for i in range(column)] for j in range(row)] i, j, d.原创 2021-05-18 23:01:00 · 190 阅读 · 0 评论 -
QGraphicsScene的坐标矫正
在用一个QGraphicsScene做一个工具发现他的坐标我们经常用到的那样,而是原点在左上角的位置,正x方向朝右,而正y方向是朝下的,这就需要做两个工作,一个是将坐标原点放到试图的正中间而不是左上角,第二个将y轴朝上,而不是朝下,这样的话就更符合我们一般人对坐标系统的认识,关键里面的item的值,更符合我门熟悉的那个坐标系统。将坐标原点会中心的代码如下:class ItemGraphicsScene(QtGui.QGraphicsScene): def __init__(self):原创 2020-09-30 23:10:03 · 1765 阅读 · 0 评论 -
实现单例的两种方式
第一种是用的元类实现class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(Singleton,cls).__call__(*args, **kwargs) cls.x = 5 return cls._原创 2020-08-29 19:40:01 · 142 阅读 · 0 评论 -
使用Multiprocessing弹出多个窗口
最近搞个分析Excel数据的东西,从py转成exe之后,运行的时候会弹出多个窗口,而且还关不掉,关掉就又弹出来了,直到达到某个固定的个数的时候才停止,后来查了下是用了multiprocessing模块的问题,但是这个模块在py文件模式下运行的非常好,没问题,只是在exe模式下需要加个multiprocessing.freeze_support()才行,这样转成exe之后也不会弹出多个窗口了。if __name__ == '__main__': multiprocessing.freeze_supp原创 2020-08-29 10:45:01 · 761 阅读 · 0 评论 -
用Matrix在Maya2020里实现对offsetParentMatrix约束的切换
这里写自定义目录标题在Maya2020里有了offset parent matrix 属性,这样用matrix对物体做约束的时候就可以少很多节点,且结构更清晰简洁,那么下面就实现下这个功能。首先创建两个locator,一个小球,用来模拟这个小球收到这两个locator的约束,而且是可以切换约束,即可以受locator1约束,也可以受locator2约束。既然是用matrix来做约束,那么就再创建两个multMatrix节点,用这两个matrix节点的主要目的是做带有便宜值的matrix约束,就类似于原创 2020-07-20 23:24:56 · 1120 阅读 · 0 评论 -
PySide实现各种形状的按钮
看PySide的示例代码的时候,有个时钟的案例,最后它将那个时钟设置成一个圆形,这顿时让我很感兴趣,细看代码,就是用了asMask的方法,QWidget这个类里有这个方法,共有两种使用方法,如下:于是找了张图片作为mask试试,实现下各种形状的按钮,如下图,有mask的时候是这样的无mask的时候是这样的其实这里主要用到了重写resizeEvent,以及最后用图片作为个maskself.setMask(self.mask_pixmap.mask())主要代码如下:from PySide2原创 2020-07-12 09:10:08 · 2051 阅读 · 2 评论 -
贝塞尔(Bezier)曲线节点
在网上看到一个bezier曲线的公式,那就用Maya的节点来实现下,看看效果,具体公式如下图:这个是二维的,三维的花再加个z轴向就行,import maya.OpenMayaMPx as OpenMayaMPximport maya.OpenMaya as OpenMayaclass BezierCubic(OpenMayaMPx.MPxNode): kPluginNode...原创 2020-03-14 16:26:30 · 1027 阅读 · 0 评论 -
Python搭配Everything来搜索文件夹里的内容
如果要从一个文件夹下找到自己需要的内容,以前是用os.walk来完成,但后来发现那样效率太低了,于是可以用Everything先搭建个服务器,然后再用python调用Everything的Python Api来获取自己需要查询的内容,最关键的时间这样的效率要比之前的高很多。安装Everything搭建服务器,这里不再重复,可以参考下面的链接Everything快速搭建HTTP文件服务器下面说...原创 2020-02-29 16:25:54 · 3409 阅读 · 0 评论 -
Python的__new__用法
用__new__ 主要是想改变原来一些类无法实现的方法,比如有个列表,我想让它按照我的想要的方式转换成字符串,那么就可以这样写class ListToString(str): def __new__(cls, fruit_list): fruit_string = ', '.join(fruit_list) return super(ListToStr...原创 2019-11-23 15:29:20 · 262 阅读 · 0 评论 -
用getattr刷新节点的数据
在MayaBatch模式下,有时候一个节点的某个属性被另一个节点的某个属性链接了,比如驱动关键帧,最典型的就是模型组的现实和隐藏。有时候我们设置了驱动物体的那个属性,在前台的Maya上,被驱动物体的那个属性也会随之发生变化,但是在linux上的Mayabatch模式,却并没有发生变化,这时如果出缓存这个属性就可能写出的时候是错误的,如,我们通过控制器的某个属性来控制某些模型的显示和隐藏,但此时如果...原创 2019-07-31 23:05:36 · 230 阅读 · 0 评论 -
用Matrix节点来实现约束功能
为什么要用Matrix节点实现约束功能呢?可以简化你的节点之间的层级结构可以提高节点运行效率实现方式这里就拿最简单的两个物体来演示,链接方式如下图,如果没有decomposeMatrix节点的话,需要家在MaxtrixNode插件。首先从cube出发,用它的worldmatrix和multMatrix节点的matrix in相连,然后再用matrix sum和decomposeMat...原创 2019-06-02 11:06:44 · 935 阅读 · 0 评论 -
Voxelization——体素化模型
上周部门内部进行分享知识讲座时讲到一个词Voxelization,也就是体素化,也就是用某些东西充满一个物体的内部,如下面这两张图,用小方块充满圆环和锥体。其主要算法也有多种,我这里采用的是用boundingbox来切割物体的方法,如下图:就是先求出一个模型的boundingbox,然后以一定的step对boundingbox的长宽高进行切割,然后从这些黄色的交点,按照某一方向,向模型打...原创 2019-05-02 20:06:00 · 6502 阅读 · 3 评论 -
给MarkingMenu设置自定义的快捷键
承接上篇,有时候我们需要设置自己想要的快捷键,而非Alt、Shift、Ctrl这类快捷键,这就是这篇要谈的东西。首先我们需要给我们的MarkingMenu建runTimeCommand,就是这种东西。建完这个之后,就可以设置两个快捷键,一个是press,一个是releasepress的时候,命令是显示我们的markingmenu;当release的时候,再把我们markingmenu删掉...原创 2019-05-02 16:45:43 · 564 阅读 · 0 评论 -
在Maya里用脚本设置MarkingMenu
有时候,我们将一些经常用到的重复性高的命令设置成快捷键以提高我们的效率,但我更喜欢用MarkingMenu,这样只需要甩鼠标就可以了,但是Maya默认的MarkingMenu只能通过UI来设置,如何通过脚本来实现,自己研究了一番,终于实现了,下面就具体说明下,import maya.cmds as cmdsimport pymel.core as pmMEDIOCRE_MENU_NAME...原创 2019-03-31 12:15:49 · 821 阅读 · 0 评论 -
导出FBX修改namespace
在公司给游戏部门弄一个导出fbx的插件,导出的时候需要将namespace去掉,这样方便他们导入UE里面,以前的操作是将Maya里的reference全部解除掉,变成导出的模式,这样去掉namespace后再导出fbx,但是这样呢有个问题,就是当一个文件里有相同的rig的时候,那么变成导入的时候就会多个后缀1,2之类的;而且另一方面将源文件也给破坏了,动画师如果再修改的话还得重新开文件,于是寻找下...原创 2019-03-24 19:54:50 · 1004 阅读 · 2 评论 -
如何将py文件编译成pyd使其能在Maya环境下运行
因为种种原因,有时候我们需要将py文件编译成pyd文件,但在Maya的环境下,如果是用官方的Python编译出来的pyd肯定不能用,包括PyQt,如果想在Maya环境下运行也是需要特殊编译下;下面就以Maya2016位例来演示下实现方法。与Maya2016对应的VS是2012,具体对应版本可以查看PluginWizard里面的说明,所以需要安装VS2012,这是后面编译pyd所必需的。编译之前...原创 2019-02-16 11:26:19 · 1922 阅读 · 0 评论 -
QLineEdit 在Linux下不能输入中文的解决办法
最近将以前的一个工具改成之一linux平台,发现别的都正常,但是就是输入框不能输入中文了,于是问了下同事,终于找到解决办法,在运行脚本之前需要设置三个环境变量才行,如下:#! /bin/sh export GTK_IM_MODULE=ibus export QT_IM_MODULE=ibus export XMODIFIERS=@im=ibus /usr/bin/python your_p...原创 2018-08-18 08:24:16 · 2463 阅读 · 1 评论 -
Frustum Culling 在Maya里根据相机视锥来过滤物体
今天分享个在Maya里根据视锥来过滤掉相机视锥以外物体的算法,这种方法可以用来减轻动画文件的重量,因为有时候Layout打镜头的时候,是好几个镜头一连串打得,到动画阶段,如果是近景或特写那么有好多地方根本看不到,这时可以用这种方法来隐藏那些看不到的物体;还有个应用的地方是当出缓存的时候可以计算出角色和道具什么时间段在相机视图里,这样再出缓存的时候就会即节省时间又节省硬盘空间,尤其是在大量角色出缓存或翻译 2018-04-01 22:10:06 · 895 阅读 · 0 评论 -
PySide QLineEdit的自动补全功能——auto-completion
前段时间给项目里写了个小东西,需要QLineEdit这个东西,然后艺术家用的时候每次都要手动输入,自己就设想能不能添加个自动补全的功能呢,于是上网查了下,还真有,就是下面的两个方案,自己分别说下,第一种是,只在开头的位置自动补全,如果你一次输入好多单词,那么后面输入就没有自动补全了,相对也简单些,根据自己的需要定。 代码如下:import sysfrom PySide.QtCor...原创 2018-03-31 11:40:05 · 1247 阅读 · 1 评论 -
对实拍和三维结合在maya里处理的一点想法
感觉时间过得飞快,转眼半年已经过去了,已经是下半年的第一个月了,也确实该写点东西了;最近自己报名了一个英语班在学习英语,所以再技术方面没有以前那么投入了,今天就基于最近公司的项目写一个小一点的东西,基本属于抛砖引玉。 最近公司在做一部实拍和三维结合的电影,这就需要将实拍素材导入到maya里,然后将三维的模型和实拍的素材结合起来,来拍屏或者修改动画看最终的三维和实拍结合的效果。这里就有个小知识点,就原创 2017-07-12 20:37:16 · 1413 阅读 · 1 评论 -
在maya外面,通过命令行向maya发送信息
写maya插件时,在maya的脚本编辑器里太难写了,一般都是用一些专门的IDE,比如sublime或pycharm,如果这时可以给这些专门的IDE写个插件,可以将在IDE里写的代码直接发送到maya里,岂不是很好,不用来回拷贝代码了,下面就说下这种插件实现的一个思路方法。 主要用到一个命令是commandPort,相当于在maya里创建一个服务器端口,一般在我们本地用的话,随便给个原创 2016-11-12 22:44:20 · 8182 阅读 · 4 评论 -
mel、pyton、c++ maya一个noise效果的实现的时间比较
看一本书,里面讲到脚本和api的执行效率,并举了个例子,是给一个20*20的polygon球体做noise运算,作者也奉献了python和mel的脚本,自己又用C++编译了一个command,分别测试了下,三者的运行效率很了然。mel/* Apply noise to the supplied geometry object using the supplied max displacem原创 2016-09-29 17:11:43 · 1566 阅读 · 0 评论 -
ik极向量控制器应该往哪里放——where a ik handle's pole vector should live
import pymel.core as pmdef place_correct_pole_locator(joint1, joint2, joint3): joint_start_position = pm.xform(joint1, q = 1, ws = 1, rp = 1) joint_mid_position = pm.xform(joint2, q = 1, ws原创 2016-09-06 13:55:52 · 873 阅读 · 0 评论 -
将一段时间按照一星期一星期的切割开
前段时间在PyQt里遇到一个这样的问题,就是想将一段时间,按照一星期一星期这样的分段来切割开,然后在去统计每一星期里的一些东西,最后自己看了看帮助实现了,贴代码如下:def get_weeks_from_period(): weeks = [] start_date = self._start_date.date() end_date = sel原创 2016-09-01 14:35:06 · 378 阅读 · 0 评论 -
移除字符串尾部的数字python
今天在下脚本的时候遇到一个问题,比如有这样的一个字符串 t = "book123456",想把尾部的数字全部去掉,只留下“book”,自己用正则试了下,是实现了,但速度不是很快,于是问了一下同事,他给的解决的方法确实很简洁,也让自己长了知识点,如下:import stringt.rstrip(string.digits)这样就全部将数字移除了,顺便将string这个模块看了下文档,也原创 2016-06-23 16:22:58 · 6032 阅读 · 0 评论 -
用maya API删除动画曲线多余的关键帧——掐头去尾删帧
由于公司项目的需要,一个文件里有上万条动画曲线,要删除某一帧前面的帧,也要删掉某一帧后面的帧,相当于是掐头去尾,但从功能上来说这个mel完全可以胜任,但是执行起来效率就特别的低了,于是就想到了用maya API来写个cmd,这样可以提高执行效率,最后的结果也不出所料,一个6G的含有上万条动画曲线的文件,而且每根曲线都是从-2000多帧开始到3000多帧,都是动补的数据,实际镜头只需要大约100原创 2016-05-11 14:10:14 · 5885 阅读 · 1 评论 -
一个简单的时间类的定制
这是在看《python核心编程》的第十三章的一个习题,自己全部实现了它的功能要求,学会了__add__、__iadd__、__radd__的使用方法,iadd是自加,等同于i += j;而radd是右边相加,就是a + b的时候a没有add的方法,才会调用b的radd方法,使用起来就简单了,无非是对应的属性相加或者相减,关键是对相加或相减的结果进行恰当的处理;还有就是__str__ 和__repr原创 2016-05-01 12:18:49 · 361 阅读 · 0 评论 -
maya简单的双倍位移节点的创建
主要学习了maya里节点的工作原理,maya的节点就像一个黑箱子,里面做什么操作不用过问,只需要给它输入值和然后给你计算出输出值,里面具体的算我我们自己按照需要来实现,其中最重要的两个,一个是MDataBlock,一个是MDataHandle,我们的输入,输出,属性值都是通过datablock来计算的,那么要想访问datablock内部的数据,我们的需要datahandle来实现,具体实现大概有五原创 2016-04-30 10:51:54 · 2911 阅读 · 3 评论 -
python PIL图片加黑边和标题的处理
公司有人让给图片批量加个黑边和标题,省得在PS里一张一张的麻烦处理,一开始她也给我个PS的javascript的脚本,但不知怎么老是报错,说是找不到javascript,于是自己只能想办法,于是自然而然想到了,python的pillow了,顺利实现其功能,这里贴出来代码,方便以后的使用。代码如下:from PIL import Image, ImageFont, ImageDrawimp原创 2016-02-16 12:10:16 · 9647 阅读 · 1 评论 -
@property的使用
在python有时候需要对类的某些属性做一些访问的限制或者来检查属性是否是我们想要的或者符合我们实际要求的,就可以用@property来定制类。__author__ = 'lulongfei'class Student(object): def get_score(self): return self._score def set_score(self, value): if原创 2015-12-23 14:29:24 · 320 阅读 · 0 评论 -
TypeError: playMovVideos() takes exactly 2 arument but 3 to given的解决方法
自己再类里定义了个函数,用来播放视频def playMovVideos(self, mov): import os os.system('start "rv.exe" "%s"'%mov)在将这个函数个QtCore链接起来的时候就老报题目的这个错,自己苦想很久不得其解,最后在网上反倒一篇文章,才解开我的疑惑。self.connect(self._videoN原创 2015-12-23 12:35:59 · 505 阅读 · 0 评论 -
类的定制
今天在网上看了篇文件,关于类的定制,原来类也能那么风骚的使用啊,涨了不少知识,一时半会还没消化呢,先把自己的练习代码贴上,后面慢慢吃透。__author__ = 'lulongfei'class Student(object): def __init__(self, name): self.name = nameprint Student('Michael')class S原创 2015-11-30 20:04:51 · 429 阅读 · 0 评论 -
Python的decorator学习笔记
今天将python的decorator系统地学习了一下,自己也试着写了下,共有三种类型,第一种是普通装饰器,不带参数也不带返回值的。只需要将func(*args, **kwargs)在闭包函数块儿里执行就行,这是一定要执行的,不然就会返回与原来函数没有任何关系的函数了,甚至报错。同时如果是用decorator,那么原来函数的函数名字就变成了wrapper的名字,这时,需要我们将原来的和wrappe原创 2015-11-26 14:46:21 · 986 阅读 · 0 评论