Я хочу реализовать собственный расчет цвета для таблицы поиска цветов. Я создал подкласс vtkColorTransferFunction и переопределил функции GetColor и MapValue. Но цвет не изменится, независимо от того, использую ли я исходный vtkColorTransferFunction или свой подкласс. Более того, функции, которые я переопределил, не вызывались ядром VTK. Как реализовать собственный расчет цвета?
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkDataSetMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
from vtkmodules.vtkRenderingCore import (
vtkColorTransferFunction
)
from vtkmodules.vtkCommonDataModel import (
VTK_QUAD,
vtkUnstructuredGrid,
)
from vtkmodules.vtkCommonCore import vtkPoints
from vtk.numpy_interface import dataset_adapter as dsa
from typing import Tuple, MutableSequence
import math
import numpy as np
class LogarithmicColorTransferFunction(vtkColorTransferFunction):
def __init__(self):
super().__init__()
self.originalMin = 0
self.originalMax = 1
def SetOriginalRange(self, min, max):
self.originalMin = min
self.originalMax = max
def MapValue(self, v:float):
print(v) # Just dummy print, but was never executed
return super().MapValue(v)
def GetBlueValue(self, x:float):
print(x) # Just dummy print, but was never executed
return super().GetBlueValue(x)
def GetColor(self, x:float) -> Tuple[float, float, float]:
print(x) # Never executed
log = math.log
exp = math.exp
a = self.originalMin
b = self.originalMax
y = -((log(a)-log(b*x-a*x+a))/(log(b)-log(a)))
# y = (exp(x*(log(b)-log(a))+log(a))-a) / (b-a)
return super().GetColor(y)
def GetColor(self, x:float, rgb:MutableSequence[float]) -> None:
print(x) # Never executed
c = self.GetColor(x)
rgb[:] = c
def main():
ctf = LogarithmicColorTransferFunction()
ctf.SetColorSpaceToRGB()
ctf.SetScaleToLinear()
ctf.SetNanColor(0.0, 0.0, 0.0)
table = np.array([
[0, 0.01, 0.043, 1],
[0.2, 0.641, 0.164, 0.725],
[0.3, 0.988, 0.051, 0.11],
[0.5, 1, 0.975, 0.5],
[0.8, 1, 1, 1],
[1, 1, 1, 1]
])
for point in table:
ctf.AddRGBPoint(*point)
ctf.SetOriginalRange(1, 5)
points = vtkPoints()
ugrid = vtkUnstructuredGrid()
data = np.array([[0, 0, 0,],
[10, 0, 0],
[10, 10, 0],
[0, 10, 0]])
points.SetData(dsa.numpyTovtkDataArray(data))
quad = [0,1,2,3]
ugrid.InsertNextCell(VTK_QUAD, 4, quad)
ugrid.SetPoints(points)
c = np.array([0, 1, 2, 3])/3
ugrid.GetPointData().SetScalars(dsa.numpyTovtkDataArray(c))
mapper = vtkDataSetMapper()
mapper.SetInputData(ugrid)
mapper.SetLookupTable(ctf)
actor = vtkActor()
actor.SetMapper(mapper)
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderer.AddActor(actor)
renderWindow.Render()
renderWindowInteractor.Start()
if __name__ == '__main__':
main()
Подробнее здесь: https://stackoverflow.com/questions/791 ... refunction
Как создать подкласс vtkColorTransfreFunction? ⇐ Python
Программы на Python
-
Anonymous
1731116200
Anonymous
Я хочу реализовать собственный расчет цвета для таблицы поиска цветов. Я создал подкласс vtkColorTransferFunction и переопределил функции GetColor и MapValue. Но цвет не изменится, независимо от того, использую ли я исходный vtkColorTransferFunction или свой подкласс. Более того, функции, которые я переопределил, не вызывались ядром VTK. Как реализовать собственный расчет цвета?
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkDataSetMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
from vtkmodules.vtkRenderingCore import (
vtkColorTransferFunction
)
from vtkmodules.vtkCommonDataModel import (
VTK_QUAD,
vtkUnstructuredGrid,
)
from vtkmodules.vtkCommonCore import vtkPoints
from vtk.numpy_interface import dataset_adapter as dsa
from typing import Tuple, MutableSequence
import math
import numpy as np
class LogarithmicColorTransferFunction(vtkColorTransferFunction):
def __init__(self):
super().__init__()
self.originalMin = 0
self.originalMax = 1
def SetOriginalRange(self, min, max):
self.originalMin = min
self.originalMax = max
def MapValue(self, v:float):
print(v) # Just dummy print, but was never executed
return super().MapValue(v)
def GetBlueValue(self, x:float):
print(x) # Just dummy print, but was never executed
return super().GetBlueValue(x)
def GetColor(self, x:float) -> Tuple[float, float, float]:
print(x) # Never executed
log = math.log
exp = math.exp
a = self.originalMin
b = self.originalMax
y = -((log(a)-log(b*x-a*x+a))/(log(b)-log(a)))
# y = (exp(x*(log(b)-log(a))+log(a))-a) / (b-a)
return super().GetColor(y)
def GetColor(self, x:float, rgb:MutableSequence[float]) -> None:
print(x) # Never executed
c = self.GetColor(x)
rgb[:] = c
def main():
ctf = LogarithmicColorTransferFunction()
ctf.SetColorSpaceToRGB()
ctf.SetScaleToLinear()
ctf.SetNanColor(0.0, 0.0, 0.0)
table = np.array([
[0, 0.01, 0.043, 1],
[0.2, 0.641, 0.164, 0.725],
[0.3, 0.988, 0.051, 0.11],
[0.5, 1, 0.975, 0.5],
[0.8, 1, 1, 1],
[1, 1, 1, 1]
])
for point in table:
ctf.AddRGBPoint(*point)
ctf.SetOriginalRange(1, 5)
points = vtkPoints()
ugrid = vtkUnstructuredGrid()
data = np.array([[0, 0, 0,],
[10, 0, 0],
[10, 10, 0],
[0, 10, 0]])
points.SetData(dsa.numpyTovtkDataArray(data))
quad = [0,1,2,3]
ugrid.InsertNextCell(VTK_QUAD, 4, quad)
ugrid.SetPoints(points)
c = np.array([0, 1, 2, 3])/3
ugrid.GetPointData().SetScalars(dsa.numpyTovtkDataArray(c))
mapper = vtkDataSetMapper()
mapper.SetInputData(ugrid)
mapper.SetLookupTable(ctf)
actor = vtkActor()
actor.SetMapper(mapper)
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderer.AddActor(actor)
renderWindow.Render()
renderWindowInteractor.Start()
if __name__ == '__main__':
main()
Подробнее здесь: [url]https://stackoverflow.com/questions/79171966/how-to-subclass-vtkcolortransfrefunction[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия