Я начал давать базовый сценарий типа вокселя, где он будет выглядеть в 6 направлениях, связанных с точкой n, нарисовать плоскость по любой стороне, которая не имеет что-нибудь рядом с ним. Тогда я могу объединить плоскости, и это сделает объект.Как найти отдельные объекты в списке 3D-координат
Это хорошо работает, когда это все один объект, но если между объектами есть место, он все еще объединяет его как один объект. Когда список координат равен (x,y,z)
, как бы я разделил его на основе того, что связано? Единственный способ, с помощью которого я могу думать, будет очень тяжело обрабатывать и будет включать проверку каждого свободного пространства вокруг объекта при его создании до тех пор, пока его не останется, но я полагаю, что, вероятно, должен быть лучший способ.
Для записи, это на самом деле не будет использоваться для чего-нибудь, это просто для удовольствия, чтобы увидеть, если я мог бы сделать это
import pymel.core as py
directions = [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]]
grid = {}
grid[(0,0,0)] = 1
grid[(1,0,0)] = 0
grid[(-1,0,0)] = 1
grid[(0,1,0)] = 1
for originalCoordinate in grid.keys():
adjacentCoordinates = [tuple(sum(j) for j in zip(i, originalCoordinate)) for i in directions]
blockHere = grid[originalCoordinate]
if blockHere:
for newCoordinate in adjacentCoordinates:
if not grid.get(newCoordinate, 0):
newDirection = tuple(i[1]-i[0] for i in zip(originalCoordinate, newCoordinate))
newSide = py.polyPlane(width = 1, height = 1, sx = 1, sy = 1)[0]
sideLocation = list(originalCoordinate)
sideRotation = [0, 0, 0]
if newDirection[0]:
if newDirection[0] > 0:
print originalCoordinate, "Facing X"
sideLocation[0] += 0.5
sideRotation[2] += -90
else:
print originalCoordinate, "Facing -X"
sideLocation[0] += -0.5
sideRotation[2] += 90
if newDirection[1]:
if newDirection[1] > 0:
print originalCoordinate, "Facing Y"
sideLocation[1] += 0.5
sideLocation[1] += 0
else:
print originalCoordinate, "Facing -Y"
sideLocation[1] += -0.5
sideLocation[1] += 180
if newDirection[2]:
if newDirection[2] > 0:
sideLocation[2] += 0.5
sideRotation[0] += 90
print originalCoordinate, "Facing Z"
else:
sideLocation[2] += -0.5
sideRotation[0] += -90
print originalCoordinate, "Facing -Z"
py.move(newSide, sideLocation)
py.rotate(newSide, sideRotation)
Вы действительно должны добавить теги: tag pymel и Maya. Я предложил изменить это сообщение. Но если вы не видите, что это отражено, вы должны добавить эти теги в ближайшее время. – kartikg3
Быстрое предложение: попробуйте использовать «pm» или «pmc» для pymel, вместо «py». – kartikg3
Спасибо, что, честно говоря, проблема не была особенно специфичной для Maya (только код), я не думал, что ей нужны теги :) И это в основном для того, чтобы быть более дружелюбным к Google с pm вместо py? – Peter