我知道在迭代列表时不允许删除元素,但允许在迭代时将元素添加到python列表中.这是一个例子:
for a in myarr:
if somecond(a):
myarr.append(newObj())
Run Code Online (Sandbox Code Playgroud)
我在我的代码中尝试了这个并且似乎工作正常,但是我不知道是不是因为我很幸运并且它将来会在某个时候破坏?
编辑:我不喜欢复制列表,因为"myarr"很大,因此它太慢了.另外,我需要用"somecond()"检查附加的对象.
编辑:在某些时候"somecond(a)"将是假的,因此不会有无限循环.
编辑:有人问过"somecond()"函数.myarr中的每个对象都有一个大小,每次"somecond(a)"为真,并且一个新对象被附加到列表中,新对象的大小将小于a."somecond()"有一个关于小物体如何的epsilon,如果它们太小,它将返回"false"
我创建了一个ModelForm类,以便能够创建和编辑数据库条目.创建新条目效果很好,但是,我不知道如何使用ModelForms编辑/更新现有条目.我可以使用以下命令用数据库实例实例化ModelForm:
form = MyModelForm(instance=MyModel.objects.get(pk=some_id))
Run Code Online (Sandbox Code Playgroud)
但是,当我将它传递给模板并编辑一个字段然后尝试保存它时,我创建一个新的数据库条目而不是更新"some_id"?
编辑1:这是我的看法
def editData(request):
if request.method == 'POST':
form = MyModelForm(request.POST, request.FILES)
if form.is_valid():
editedEntry = form.save() # <-- creates new entry, instead of updating
Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的Django模型:
class MyModel(models.Model):
parent = models.ForeignKey(ParentModel)
name = models.CharField(blank=True, max_length=200)
... other fields ...
class Meta:
unique_together = ("name", "parent")
Run Code Online (Sandbox Code Playgroud)
这按预期工作; 如果同时存在name多次,parent则会出现错误:"具有此Name和Parent的MyModel已存在."
但是,当我保存多个MyModel相同parent但name字段为空白时,我也会收到错误,但是应该允许这样做.所以基本上我不想在name字段为空时得到上述错误.这有可能吗?
是否有编译器标志或强制OpenGL核心配置文件的其他方式?当我使用glRotatef之类的弃用函数时,我想得到一个错误.
编辑1:我正在使用Linux,但是,我也有兴趣了解如何在Windows中执行此操作
EDIT2:我宁愿在编译时遇到错误,但运行时错误也没问题.
当使用glDrawElements绘制对象时,是否可以在OpenGL中实现平面着色,如果是这样的话?如果可能的话,理想的方法是仅计算每个三角形的法线一次.
解决方案必须仅使用可编程管道(核心配置文件).
我有两个模型,每个模型都有一个图像.一个人拥有父母的外键.当我删除父级时,我想删除父级和子级以及磁盘上的映像文件.为此,我重写了删除方法:
class MyModelParent(models.Model):
image = models.ImageField(upload_to = "images/" )
def delete(self, *args, **kwargs):
if self.image:
self.image.delete()
super(MyModelParent, self).delete(*args, **kwargs)
class MyModelChild(models.Model):
parent = models.ForeignKey(MyModelParent)
image = models.ImageField(upload_to = "images/" )
def delete(self, *args, **kwargs):
if self.image:
self.image.delete()
super(MyModelChild, self).delete(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
当我删除MyModelParent的实例时,会调用其重写的delete(),但不会调用其中的子节点(即使它们从数据库中删除),因此它们的图像仍保留在磁盘上.谁知道我做错了什么?
我有一个3D笛卡尔立方体.对于此立方体中的每个点,都有相应的密度值.当密度突然变化时,意味着存在空腔.现在找到空腔,我计算立方体中每个点的梯度.这给了我一个腔表面上的点云.我现在想在给定点云的情况下对腔体表面进行网格划分.
不幸的是,我没有任何表面重建的经验,并且想知道是否有人可以推荐一种合适的算法来产生一个封闭的腔体表面?
立方体非常大,因此腔体表面的点云可以很容易地达到500,000点或更多.我读过这篇文章:从3D点云进行曲面重建的鲁棒算法?我认为有用.然而,似乎我面临的问题更简单,因为:
我使用glDrawElements绘制三角形网格,并希望能够使用鼠标单击选择/选择三角形.三角形的网格可以非常大.
在固定功能OpenGL中,有可能使用GL_SELECT:http://content.gpwiki.org/index.php/OpenGL:Tutorials:Picking ..但是我只对使用OpenGL核心配置文件感兴趣.
另一种可能性是使用'颜色编码':
http://www.lighthouse3d.com/opengl/picking/index.php?color1
http://www.opengl.org/resources/faq/technical/selection.htm
..但据我所知,使用glDrawElements时无法指示每个三角形信息?
最后,我可以通过鼠标位置拍摄拾取光线来进行基于CPU的拾取,但这会非常慢,因为我想我必须转换CPU上的三角形,所以我更喜欢基于GPU的解决方案.
有没有人建议在OpenGL核心配置文件中使用glDrawElements时采摘的最佳方法是什么?