[断面画像を重ね合わせて、物体を3次元表示]の , [バックヤード処理・サブグループ]
[断面画像を重ね合わせて、物体を3次元表示], Python(パイソン) 使って作ってみた ,ソースプログラムリスト あり へ
-----
2024.8.23 presented in [note] ( //note.com/runningWater/ )
2024.9.14 プログラム改変に伴う、書き直しを行った
2024.9.17 プログラム改変に伴う、書き直しを行った
----------
1 はじめに
これ以降に記述されている内容は、このようなコンピューター・プログラムを制作した、というような事を、ただ、述べているに過ぎない。
以下の記述を読んだ人が、それを単に参考にする、というのであれば、問題は無いと、思われる。
しかし、記述されている内容に沿って、その人が、そこに記されているのと同様の制作や作業を行った際に、その制作、作業、コンピューターの作動の結果、使用されたコンピューター等、様々な方面において、何らかの問題が発生しない、という保証は、全くない。
その制作、作業、コンピューターの作動の結果、その人や、その人が所属している組織、その人が使用した様々な機器、インフラストラクチャー等の、身の上にどのような事が起ころうとも、私は一切、責任を負わない。
このプログラムは、Python(パイソン) 言語を使って、記述されている。
----------
2 バックヤード処理・サブグループ
これは、動作の様が、画面上に現れないような処理を担当する、という機能を果たす、サブルグループである。
これを構成しているモジュールは、以下の通りである。
BackYardProcess
HiddenLineRemoval
MakeImageData
ViewSpace
WorldSpace
WriteImageToOuterMedia
----------
3 BackYardProcess モジュール
ファイル名 [BackYardProcess.py]
----------
import MakeImageData
import WriteImageToOuterMedia
MODULE_NAME = "BackYardProcess"
global_ins_ImageDataTwoDimensionHandling = " "
#------------------------------------------------------------
def initializing_process ( ) :
methode_name = " initializing_process"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + methode_name )
print ( "==================================" )
MakeImageData \
.initializing_process ( )
#----------------------------------------
def set_rotation_angle ( arg_ins_DataToBeHandedOver ) :
function_name = "set_rotation_angle"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
rotation_angle_degree_XAxis_to_YAxis = \
arg_ins_DataToBeHandedOver \
.get_value ( 1 )
rotation_angle_degree_XAxis_to_ZAxis = \
arg_ins_DataToBeHandedOver \
.get_value ( 2 )
print ( "==================================" )
print ( "Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "rotation_angle_degree_XAxis_to_YAxis = " \
+ rotation_angle_degree_XAxis_to_YAxis )
print ( "rotation_angle_degree_XAxis_to_ZAxis = " \
+ rotation_angle_degree_XAxis_to_ZAxis )
print ( "==================================" )
# ---------------------------
global global_ins_ImageDataTwoDimensionHandling
global_ins_ImageDataTwoDimensionHandling = \
MakeImageData \
.set_rotation_angle_degree ( \
rotation_angle_degree_XAxis_to_YAxis
, rotation_angle_degree_XAxis_to_ZAxis
)
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "Done , set_rotation_angle_degree" )
print ( "rotation_angle_degree_XAxis_to_YAxis = " + \
str ( rotation_angle_degree_XAxis_to_YAxis ) )
print ( "rotation_angle_degree_XAxis_to_ZAxis = " + \
str ( rotation_angle_degree_XAxis_to_ZAxis ) )
print ( "==================================" )
return global_ins_ImageDataTwoDimensionHandling
#----------------------------------------
def make_image_data ( arg_ins_DataToBeHandedOver ) :
function_name = "make_image_data"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
global global_ins_ImageDataTwoDimensionHandling
global_ins_ImageDataTwoDimensionHandling \
= MakeImageData \
.make_image_data ( arg_ins_DataToBeHandedOver )
width_of_ImageData \
= global_ins_ImageDataTwoDimensionHandling \
.get_width_of_ImageData ()
height_of_ImageData \
= global_ins_ImageDataTwoDimensionHandling \
.get_height_of_ImageData ()
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "width_of_ImageData = " + str ( width_of_ImageData ) )
print ( "height_of_ImageData = " + str ( height_of_ImageData ) )
print ( "==================================" )
return global_ins_ImageDataTwoDimensionHandling
#----------------------------------------
def write_image_to_OuterMedia ( ) :
function_name = "write_image_to_OuterMedia"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
global global_ins_ImageDataTwoDimensionHandling
WriteImageToOuterMedia \
.write_image_to_OuterMedia (
global_ins_ImageDataTwoDimensionHandling
)
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
return
----------
4 HiddenLineRemoval モジュール
ファイル名 [HiddenLineRemoval.py]
----------
import numpy as NUMPY
#**********************
import ErrorProcess
#**********************
#========================================
class HiddenLineRemoval :
CV_CLASS_NAME = "HiddenLineRemoval"
#--View ----------------------------------------------------------
# dordinate system in View Space
# X + ---> to right side
# Y + ---> to upper side
# origin located at left under corner of window
#--------------------------------
# definition of constructer
def __init__( self
, arg_requester_module
, arg_requester_function
, arg_x_value_of_perspective_drawing_vanishing_point
, arg_width_of_Field_of_View
, arg_height_of_Field_of_View
) :
methode_name = "constructer"
print ( "==================================" )
print ( "Enter into , Class = " + HiddenLineRemoval.CV_CLASS_NAME
+ " , methode = " + methode_name )
print ( " arg_requester_module = " + arg_requester_module
+ " , arg_requester_function = " + arg_requester_function )
print ( " arg_x_value_of_perspective_drawing_vanishing_point = " \
+ str ( arg_x_value_of_perspective_drawing_vanishing_point ) )
print ( " arg_width_of_Field_of_View = " + str ( arg_width_of_Field_of_View ) )
print ( " arg_height_of_Field_of_View = " + str ( arg_height_of_Field_of_View ) )
print ( "==================================" )
self.iv_x_value_of_perspective_drawing_vanishing_point \
= arg_x_value_of_perspective_drawing_vanishing_point
self.iv_width_of_Field_of_View = arg_width_of_Field_of_View
self.iv_height_of_Field_of_View = arg_height_of_Field_of_View
self.iv_row_size_of_Matrix = self.iv_height_of_Field_of_View
self.iv_column_size_of_Matrix = self.iv_width_of_Field_of_View
# set matrix of x_value, initializing value [drawing_vanishing_point]
self.iv_matrix_using_NUMPY_containing_x_value_of_each_location \
= NUMPY.full ( \
( self.iv_row_size_of_Matrix
, self.iv_column_size_of_Matrix
)
, float ( self.iv_x_value_of_perspective_drawing_vanishing_point )
)
self.iv_list_of_ErrorMessage = [
"******** Error !!! **********"
, " "
, " "
, " "
, " "
, " "
]
print ( "==================================" )
print ( "Exit from , Class = " + HiddenLineRemoval.CV_CLASS_NAME
+ " , methode = " + methode_name )
print ( " arg_requester_module = " + arg_requester_module
+ " , arg_requester_function = " + arg_requester_function )
print ( "==================================" )
#------------------------------------------------------------
def detect_and_set_x_value_of_directed_location ( \
self
, arg_requester_module
, arg_requester_function
, arg_X_in_ViewSpace
, arg_Y_in_ViewSpace
, arg_x_in_WorldSpace
) :
methode_name = "detect_and_set_x_value_of_directed_location"
# print ( "==================================" )
# print ( "Enter into , Class = " + HiddenLineRemoval.CV_CLASS_NAME
# + " , methode = " + methode_name )
# print ( " arg_requester_module = " + arg_requester_module
# + " , arg_requester_function = " + arg_requester_function )
# print ( " arg_X_in ViewSpace = " \
# + str ( arg_X_in ViewSpace )
# print ( " arg_Y_in ViewSpace = " + str ( arg_Y_in ViewSpace ) )
# print ( " arg_x_in_WorldSpace = " + str ( arg_x_in_WorldSpace ) )
# print ( "==================================" )
row_in_Matrix = int ( self.iv_height_of_Field_of_View \
- arg_Y_in_ViewSpace - 1 )
column_in_Matrix = int ( arg_X_in_ViewSpace )
if ( ( row_in_Matrix < 0 ) \
or \
( row_in_Matrix >= self.iv_row_size_of_Matrix ) \
or \
( column_in_Matrix < 0 ) \
or \
( column_in_Matrix >= self.iv_column_size_of_Matrix ) \
) :
print( "==================================" )
print( "Class = "
+ HiddenLineRemoval.CV_CLASS_NAME
+ " , methode = " + methode_name )
print ( "arg_requester_module = " , arg_requester_module )
print ( "arg_requester_function = " , arg_requester_function )
print ( "Error !!! Over Area")
print ( "arg_X_in_ViewSpace = " , arg_X_in_ViewSpace )
print ( "arg_Y_in_ViewSpace = " , arg_Y_in_ViewSpace )
print ( "arg_x_in_WorldSpace = " , arg_x_in_WorldSpace )
print ( "row_in_Matrix = " , row_in_Matrix )
print ( "column_in_Matrix = " , column_in_Matrix )
print ( "self.iv_row_size_of_Matrix = " \
, self.iv_row_size_of_Matrix )
print ( "self.iv_column_size_of_Matrix = " \
, self.iv_column_size_of_Matrix )
print( "==================================" )
self.iv_list_of_ErrorMessage [ 0 ] = \
"**** Error !!! Area Over ****"
ErrorProcess.do_error_process (
#arg_requester_module
HiddenLineRemoval.CV_CLASS_NAME
#arg_requester_function
, methode_name
#arg_terminate_process_Y_or_N
, "Y"
#arg_self.iv_list_of_ErrorMessage
, self.iv_list_of_ErrorMessage
)
# -------------------------------
value_x_in_Matrix = \
self.iv_matrix_using_NUMPY_containing_x_value_of_each_location \
[ row_in_Matrix ] [ column_in_Matrix ]
# print ( "==================================" )
# print ( "Class = " + HiddenLineRemoval.CV_CLASS_NAME
# + " , methode = " + methode_name )
# print ( " arg_X_in ViewSpace = " + str ( arg_X_in ViewSpace )
# print ( " arg_Y_in ViewSpace = " + str ( arg_Y_in ViewSpace ) )
# print ( " column_in_Matrix = " + str ( column_in_Matrix )
# print ( " row_in_Matrix = " + str ( row_in_Matrix ) )
# print ( " arg_x_in_WorldSpace = " + str ( arg_x_in_WorldSpace ) )
# print ( " value_x_in_Matrix = " + str ( value_x_in_Matrix )
# print ( "==================================" )
if ( arg_x_in_WorldSpace > value_x_in_Matrix ) :
#this location is not in HiddenLine,
# so , it must not be removed, it must be drawed
self.iv_matrix_using_NUMPY_containing_x_value_of_each_location \
[ row_in_Matrix ] [ column_in_Matrix ] \
= arg_x_in_WorldSpace
# it must be drawed
# print ( "==================================" )
# print ( "Class = " + HiddenLineRemoval.CV_CLASS_NAME
# + " , methode = " + methode_name )
# print ( " return "Y" )
# print ( "==================================" )
return "Y"
#this location is HiddenLine,
# so , it must be removed, it must not be drawed
# print ( "==================================" )
# print ( "Class = " + HiddenLineRemoval.CV_CLASS_NAME
# + " , methode = " + methode_name )
# print ( " return "N" )
# print ( "==================================" )
return "N"
----------
5 MakeImageData モジュール
ファイル名 [MakeImageData.py]
----------
import ImageDataTwoDimensionHandling
import WorldSpace
import ViewSpace
#*****************************************
import ParametersContainer
#*****************************************
MODULE_NAME = "MakeImageData"
global_ins_WorldSpace = " "
global_ins_ViewSpace = " "
# -----------------------------------------
def initializing_process ( ) :
function_name = "initializing_process"
global global_ins_WorldSpace
global_ins_WorldSpace = \
WorldSpace.WorldSpace ( MODULE_NAME , function_name )
global global_ins_ViewSpace
global_ins_ViewSpace = \
ViewSpace.ViewSpace ( MODULE_NAME , function_name )
# -----------------------------------------
def set_rotation_angle_degree ( \
arg_rotation_angle_degree_XAxis_to_YAxis
, arg_rotation_angle_degree_XAxis_to_ZAxis
) :
function_name = "set_rotation_angle_degree"
print ( "==================================" )
print ( "Enter into , Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "arg_rotation_angle_degree_XAxis_to_YAxis = " \
, arg_rotation_angle_degree_XAxis_to_YAxis )
print ( "arg_rotation_angle_degree_XAxis_to_ZAxis = " \
, arg_rotation_angle_degree_XAxis_to_ZAxis )
print ( "==================================" )
global global_ins_ViewSpace
global_ins_ViewSpace \
.set_rotation_angle_degree ( \
arg_rotation_angle_degree_XAxis_to_YAxis
, arg_rotation_angle_degree_XAxis_to_ZAxis )
print ( "==================================" )
print ( "Exit from , Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "arg_rotation_angle_degree_XAxis_to_YAxis = " \
, arg_rotation_angle_degree_XAxis_to_YAxis )
print ( "arg_rotation_angle_degree_XAxis_to_ZAxis = " \
, arg_rotation_angle_degree_XAxis_to_ZAxis )
print ( "==================================" )
return_instance = \
global_ins_ViewSpace \
.get_ImageDataTwoDimensionHandling_for_presnting_View_Space ( )
return return_instance
# -------------------------------------
def make_image_data ( arg_ins_DataToBeHandedOver ) :
function_name = "make_image_data"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
global_ins_WorldSpace \
.initializing_process ( )
global_ins_ViewSpace \
.initializing_process ( )
response_list_from_WorldSpace = " "
process_continue = "Y"
while ( process_continue == "Y" ) :
# --------------------------------------
response_list_from_WorldSpace = \
global_ins_WorldSpace \
.make_one_point_on_WorldSpace ( )
# --------------------------------------
if ( response_list_from_WorldSpace [ 1 - 1 ] == "N" ) :
# process reached to end,
# so there is no need to continue process
process_continue = "N"
break
# ----------------------------------------------
list_x_y_z_in_WorldSpace = [ \
response_list_from_WorldSpace [ 2 - 1 ] # x in WoldSpace \
, response_list_from_WorldSpace [ 3 - 1 ] # y in WoldSpace \
, response_list_from_WorldSpace [ 4 - 1 ] # z in WoldSpace \
]
list_color_value_for_drawing = [ \
response_list_from_WorldSpace [ 5 - 1 ] # Blue
, response_list_from_WorldSpace [ 6 - 1 ] # Green
, response_list_from_WorldSpace [ 7 - 1 ] # Red
]
global_ins_ViewSpace \
.draw_one_point_in_ViewSpace ( \
list_x_y_z_in_WorldSpace
, list_color_value_for_drawing
)
#***************************************************************
# draw axis line
list_start_point_x_y_z = [ 0 , 0 , 0 ]
list_end_point_x_y_z = [ [ 100 , 0 , 0 ] \
, [ 0 , 100 , 0 ] \
, [ 0 , 0 , 100 ] ]
for axis_number in range ( 1 , 4 ) :
display_axis \
= ( ParametersContainer \
.global_par_display_axis ) [ axis_number - 1 ]
if ( display_axis != "_" ) :
global_ins_ViewSpace \
.draw_axis_line ( \
display_axis
, list_start_point_x_y_z
, list_end_point_x_y_z [ axis_number - 1 ]
)
# global_ins_ViewSpace \
# .draw_axis_line ( \
# "X" # arg_axis_x_y_z
# )
# global_ins_ViewSpace \
# .draw_axis_line ( \
# "Y" # arg_axis_x_y_z
# )
# global_ins_ViewSpace \
# .draw_axis_line ( \
# "Z" # arg_axis_x_y_z
# )
#***************************************************************
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
return_instance = \
global_ins_ViewSpace \
.get_ImageDataTwoDimensionHandling_for_presnting_View_Space ( )
return return_instance
----------
6 ViewSpace モジュール
ファイル名 [ViewSpace.py]
2024.9.17 プログラム改変に伴う、書き直しを行った
----------
import numpy as NUMPY
import ImageDataTwoDimensionHandling
import ParametersContainer
#*********************************************
import MatrixFor3DRotaionV2
# import MatrixFor3DRotaion
#*********************************************
import HiddenLineRemoval
#========================================
class ViewSpace :
CV_CLASS_NAME = "ViewSpace"
#------------------------------------------------------------
# cordinate system in World Space
# x + ---> to forward side
# y + ---> to right side
# Z + ---> to upper side
#--View ----------------------------------------------------------
# dordinate system in View Space
# X + ---> to right side
# Y + ---> to upper side
# origin located at left under corner of window
#--------------------------------
# definition of constructer
def __init__( self
, arg_requester_module
, arg_requester_function
) :
methode_name = "constructer"
print ( "==================================" )
print ( "Enter into , Class = " + ViewSpace.CV_CLASS_NAME
+ " , methode = " + methode_name )
print ( " arg_requester_module = " + arg_requester_module
+ " , arg_requester_function = " + arg_requester_function )
print ( "==================================" )
#************************************************
self.iv_ins_MatrixFor3DRotaionV2 = " "
# self.iv_ins_MatrixFor3DRotaion = " "
#************************************************
self.iv_rotation_angle_degree_XAxis_to_YAxis = 0
self.iv_rotation_angle_degree_XAxis_to_ZAxis = 0
self.iv_ins_HiddenLineRemoval = " "
#----------------------------------
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space = \
ImageDataTwoDimensionHandling \
.ImageDataTwoDimensionHandling ( \
ViewSpace.CV_CLASS_NAME
, methode_name )
#---------------------
self.iv_abs_path_of_ImageDataFile \
= ParametersContainer.global_par_abs_path_of_base_directory \
+ ParametersContainer.global_par_path_of_input_directory \
+ ParametersContainer.global_par_path_of_BaseImageDataForDisplay_directory \
+ ParametersContainer.global_par_file_name_part_1_of_BaseImageDataForDisplay \
+ ParametersContainer.global_par_file_name_ending_part_of_BaseImageDataForDisplay
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.load_image_data (
ViewSpace.CV_CLASS_NAME
, methode_name
, self.iv_abs_path_of_ImageDataFile
)
#---------------------
self.iv_width_of_ViewSpace = \
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.get_width_of_ImageData ( )
self.iv_height_of_ViewSpace = \
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.get_height_of_ImageData ( )
#---------------------
self.iv_half_width_of_ViewSpace = ( int ) ( self.iv_width_of_ViewSpace / 2.0 )
self.iv_half_height_of_ViewSpace = ( int ) ( self.iv_height_of_ViewSpace / 2.0 )
self.iv_x_value_of_perspective_drawing_vanishing_point \
= float ( ParametersContainer \
.global_par_x_value_of_perspective_drawing_vanishing_point )
#------------------------------------------------
print ( "==================================" )
print ( "Exit from , Class = " + ViewSpace.CV_CLASS_NAME
+ " , methode = " + methode_name )
print ( " arg_requester_module = " + arg_requester_module
+ " , arg_requester_function = " + arg_requester_function )
print ( "==================================" )
return
#------------------------------------------------------------
def get_ImageDataTwoDimensionHandling_for_presnting_View_Space ( \
self ) :
return self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space
#------------------------------------------------------------
def set_rotation_angle_degree ( \
self
, arg_rotation_angle_degree_XAxis_to_YAxis
, arg_rotation_angle_degree_XAxis_to_ZAxis
) :
methode_name = "set_rotation_angle_degree_XAxis_to_YAxis"
self.iv_rotation_angle_degree_XAxis_to_YAxis = \
float ( arg_rotation_angle_degree_XAxis_to_YAxis )
self.iv_rotation_angle_degree_XAxis_to_ZAxis = \
float ( arg_rotation_angle_degree_XAxis_to_ZAxis )
#************************ make rotation instance ***************
self.iv_ins_MatrixFor3DRotaionV2 = \
MatrixFor3DRotaionV2 \
.MatrixFor3DRotaionV2 (
# self.iv_ins_MatrixFor3DRotaion = \
# MatrixFor3DRotaion \
# .MatrixFor3DRotaion (
#*********************************************************
ViewSpace.CV_CLASS_NAME # arg_requester_module
, methode_name # arg_requester_function
# first rotation
, "Z" # arg_first_rotation_around_axis
, self.iv_rotation_angle_degree_XAxis_to_YAxis
# second rotation
, "Y" # arg_need_Y_N_second_rotation
, "Y" # arg_second_rotation_around_axis
, self.iv_rotation_angle_degree_XAxis_to_ZAxis
)
self.clear_ViewSpace ( )
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.insert_text_into_ImageData (
ViewSpace.CV_CLASS_NAME # arg_requester_module
, methode_name # arg_requester_function
# in the commonly used mathematical XY cordinates
, 50 # arg_x_on_ImageData_space
, 50 # arg_y_on_ImageData_space
, "angles have been set" # arg_text_inserted
, 60 # arg_font_color_Blue
, 60 # arg_font_color_Green
, 180 # arg_font_color_Red
)
return \
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space
#------------------------------------------------------------
def initializing_process ( \
self
) :
methode_name = "initializing_process"
# reload image_data
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.load_image_data (
ViewSpace.CV_CLASS_NAME
, methode_name
, self.iv_abs_path_of_ImageDataFile
)
#--- prepare area for HiddenLineRemoval ---
print ( "==================================" )
print ( "Class = " + ViewSpace.CV_CLASS_NAME
+ " , methode = " + methode_name )
print ( "x_value_of_perspective = " + \
str ( ParametersContainer \
.global_par_x_value_of_perspective_drawing_vanishing_point \
) )
print ( "==================================" )
self.iv_ins_HiddenLineRemoval = \
HiddenLineRemoval \
.HiddenLineRemoval ( \
ViewSpace.CV_CLASS_NAME
, methode_name
, ParametersContainer \
.global_par_x_value_of_perspective_drawing_vanishing_point
, self.iv_width_of_ViewSpace
, self.iv_height_of_ViewSpace
)
return
#------------------------------------------------------------
def clear_ViewSpace ( self ) :
methode_name = "clear_ViewSpace"
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.load_image_data (
ViewSpace.CV_CLASS_NAME
, methode_name
, self.iv_abs_path_of_ImageDataFile
)
#------------------------------------------------------------
def draw_one_point_in_ViewSpace ( \
self
, arg_list_x_y_z_in_WorldSpace
, arg_list_color_value_for_drawing
) :
methode_name = "draw_one_point_in_ViewSpace"
# print ( "==================================" )
# print ( "Enter into , Class = " + HiddenLineRemoval.CV_CLASS_NAME
# + " , methode = " + methode_name )
# print ( " arg_requester_module = " + arg_requester_module
# + " , arg_requester_function = " + arg_requester_function )
# print ( " arg_X_in ViewSpace = " \
# + str ( arg_X_in ViewSpace )
# print ( " arg_Y_in ViewSpace = " + str ( arg_Y_in ViewSpace ) )
# print ( " arg_x_in_WorldSpace = " + str ( arg_x_in_WorldSpace ) )
# print ( "==================================" )
#-------------- not draw color? -------------------------
if ( ( arg_list_color_value_for_drawing [ 0 ] \
< int ( ParametersContainer.global_par_drawing_color_sleshold ) )\
and \
( arg_list_color_value_for_drawing [ 1 ] \
< int ( ParametersContainer.global_par_drawing_color_sleshold ) )\
and \
( arg_list_color_value_for_drawing [ 2 ] \
< int ( ParametersContainer.global_par_drawing_color_sleshold ) )\
) :
#not draw this point
return "N"
#******************************************
#drawing_location_in_ViewSpace = \
result_of_calculate_drawing_location_in_ViewSpace = \
self.calculate_drawing_location_in_ViewSpace ( \
arg_list_x_y_z_in_WorldSpace
)
drawing_location_in_ViewSpace = [ \
result_of_calculate_drawing_location_in_ViewSpace [ 0 ] \
, result_of_calculate_drawing_location_in_ViewSpace [ 1 ] \
]
#******************************************
it_must_be_drawed_Y_N_about_hidden_line = \
self.iv_ins_HiddenLineRemoval \
.detect_and_set_x_value_of_directed_location ( \
ViewSpace.CV_CLASS_NAME
, methode_name
, drawing_location_in_ViewSpace [ 0 ] # arg_X_in ViewSpace
, drawing_location_in_ViewSpace [ 1 ] # arg_Y_in ViewSpace
#***********************************
, result_of_calculate_drawing_location_in_ViewSpace [ 2 ]
# , arg_list_x_y_z_in_WorldSpace [ 0 ] #arg_x_in_WorldSpace
#***************************************
)
if ( it_must_be_drawed_Y_N_about_hidden_line == "Y" ) :
# ------ draw one point --------------
self.draw_one_point_at_directed_location_in_ViewSpace ( \
[ drawing_location_in_ViewSpace [ 0 ] \
, drawing_location_in_ViewSpace [ 1 ] \
]
, arg_list_color_value_for_drawing
)
return "Y"
return "N"
#------------------------------------------------------------
def draw_axis_line ( \
self
#**********************************************
, arg_display_axis
, arg_list_start_point_x_y_z
, arg_list_end_point_x_y_z
#**********************************************
) :
methode_name = "draw_axis_line"
# print ( "==================================" )
# print ( "Enter into , Class = " + HiddenLineRemoval.CV_CLASS_NAME
# + " , methode = " + methode_name )
# print ( " arg_requester_module = " + arg_requester_module
# + " , arg_requester_function = " + arg_requester_function )
# print ( " arg_X_in ViewSpace = " \
# + str ( arg_X_in ViewSpace )
# print ( " arg_Y_in ViewSpace = " + str ( arg_Y_in ViewSpace ) )
# print ( " arg_x_in_WorldSpace = " + str ( arg_x_in_WorldSpace ) )
# print ( "==================================" )
#*********************************************************
# list_start_point_x_y_z = [ 0 , 0 , 0 ]
# list_end_point_x_y_z = [ 0 , 0 , 0 ]
# if ( arg_axis_x_y_z == "X" ) :
# list_end_point_x_y_z [ 0 ] = 120
# if ( arg_axis_x_y_z == "Y" ) :
# list_end_point_x_y_z [ 1 ] = 120
# if ( arg_axis_x_y_z == "Z" ) :
# list_end_point_x_y_z [ 2 ] = 120
#------------------------------------
drawing_location_start_point_in_ViewSpace = \
self.calculate_drawing_location_in_ViewSpace ( \
arg_list_start_point_x_y_z
)
drawing_location_end_point_in_ViewSpace = \
self.calculate_drawing_location_in_ViewSpace ( \
arg_list_end_point_x_y_z
)
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.insert_line_figure_into_ImageData (
ViewSpace.CV_CLASS_NAME # arg_requester_module
, methode_name # arg_requester_function
# in the commonly used mathematical XY cordinates
, drawing_location_start_point_in_ViewSpace [ 0 ] \
# arg_From_x_on_ImageData_space
, drawing_location_start_point_in_ViewSpace [ 1 ] \
# arg_From_y_on_ImageData_space
, drawing_location_end_point_in_ViewSpace [ 0 ] \
# arg_To_x_on_ImageData_space
, drawing_location_end_point_in_ViewSpace [ 1 ] \
# arg_To_y_on_ImageData_space
, 3 # arg_thickness_of_line_figure
, 20 # arg_color_Blue
, 10 # arg_color_Green
, 220 # arg_color_Red
)
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.insert_text_into_ImageData (
ViewSpace.CV_CLASS_NAME # arg_requester_module
, methode_name # arg_requester_function
# in the commonly used mathematical XY cordinates
, drawing_location_end_point_in_ViewSpace [ 0 ] \
# arg_To_x_on_ImageData_space
, drawing_location_end_point_in_ViewSpace [ 1 ] \
#*********************************************
, arg_display_axis
# , arg_axis_x_y_z
#*********************************************
, 20 # arg_color_Blue
, 10 # arg_color_Green
, 220 # arg_color_Red
)
return
#------------------------------------------------------------
def calculate_drawing_location_in_ViewSpace ( \
self
, arg_list_x_y_z_in_WorldSpace
) :
# do rotation
#***********************************************
list__x_y_z_after_rotation = \
self.iv_ins_MatrixFor3DRotaionV2 \
.calculate_cordinate_after_rotation ( \
arg_list_x_y_z_in_WorldSpace
)
#***********************************************
# x in WorldSpace
w1 = list__x_y_z_after_rotation [ 0 ] \
- self.iv_x_value_of_perspective_drawing_vanishing_point
w2 = 0 - self.iv_x_value_of_perspective_drawing_vanishing_point
rate_of_magnification = w1 / w2
w1_X = list__x_y_z_after_rotation [ 1 ] # y cordinate value
w1_Y = list__x_y_z_after_rotation [ 2 ] # z cordinate value
w2_X = w1_X * rate_of_magnification
w2_Y = w1_Y * rate_of_magnification
drawing_location_X_in_ViewSpace = \
int ( self.iv_half_width_of_ViewSpace + w2_X )
drawing_location_Y_in_ViewSpace = \
int ( self.iv_half_height_of_ViewSpace + w2_Y )
#***************************************
return_list = [ drawing_location_X_in_ViewSpace \
, drawing_location_Y_in_ViewSpace \
, list__x_y_z_after_rotation [ 0 ] \
]
#***************************************
return return_list
#------------------------------------------------------------
def draw_one_point_at_directed_location_in_ViewSpace ( \
self
, arg_list_X_Y_in_ViewSpace
, arg_list_color_value_for_drawing
) :
methode_name = "draw_one_point_at_directed_location_in_ViewSpace"
self.iv_ins_ImageDataTwoDimensionHandling_for_presnting_View_Space \
.put_data_of_one_pixel ( \
ViewSpace.CV_CLASS_NAME # arg_requester_module
, methode_name # arg_requester_function
# in the commonly used mathematical XY cordinates
, arg_list_X_Y_in_ViewSpace [ 0 ] # arg_x_on_ImageData_space
, arg_list_X_Y_in_ViewSpace [ 1 ] # arg_Y_on_ImageData_space
, arg_list_color_value_for_drawing [ 0 ] # arg_color_data_Blue
, arg_list_color_value_for_drawing [ 1 ] # arg_color_data_Green
, arg_list_color_value_for_drawing [ 2 ] # arg_color_data_Red
)
7 WorldSpace モジュール
ファイル名 [WorldSpace.py]
----------
import ParametersContainer
import ImageDataTwoDimensionHandling
#========================================
class WorldSpace :
CV_CLASS_NAME = "WorldSpace"
#------------------------------------------------------------
# cordinate system in World Space
# x + ---> to forward side
# y + ---> to right side
# Z + ---> to upper side
#--------------------------------
# definition of constructer
def __init__( self
, arg_requester_module
, arg_requester_function
) :
methode_name = "constructer"
print ( "==================================" )
print ( "Enter into , Class = " + WorldSpace.CV_CLASS_NAME
+ " , methode = " + methode_name )
print ( " arg_requester_module = " + arg_requester_module
+ " , arg_requester_function = " + arg_requester_function )
print ( "==================================" )
self.iv_abs_path_of_input_ImageDataFile = " "
self.iv_ins_ImageDataTwoDimensionHandling = \
ImageDataTwoDimensionHandling \
.ImageDataTwoDimensionHandling ( \
WorldSpace.CV_CLASS_NAME # arg_requester_module
, methode_name # arg_requester_function"
)
self.iv_width_of_imageData = 0
self.iv_height_of_imageData = 0
self.iv_half_width_of_imageData = 0
self.iv_half_height_of_imageData = 0
self.iv_from_x = 0
self.iv_to_x = 0
self.iv_incliment_x = 0
self.iv_from_y = 0
self.iv_to_y = 0
self.iv_incliment_y = 0
self.iv_number_of_related_files_from = 0
self.iv_number_of_related_files_to = 0
self.iv_from_z = 0
self.iv_to_z = 0
self.iv_incliment_z = 0
self.iv_current_x_of_onePoint_in_WorldSpace = 0
self.iv_current_y_of_onePoint_in_WorldSpace = 0
self.iv_current_z_of_onePoint_in_WorldSpace = 0
self.iv_next_continue = " "
self.iv_next_x = 0
self.iv_next_y = 0
self.iv_next_z = 0
self.iv_x_of_onePoint_in_WorldSpace = 0
self.iv_y_of_onePoint_in_WorldSpace = 0
self.iv_z_of_onePoint_in_WorldSpace = 0
self.conversion_rate_from_WorldSpace_to_ImageDataSpace = 0
self.conversion_rate_from_WorldSpace_to_ViewSpace_XY = 0.0
self.conversion_rate_from_WorldSpace_to_ViewSpace_Z = 0.0
#------------------------------------------------------------
def initializing_process ( self ) :
methode_name = "initializing_process"
print ( "==================================" )
print ( "Enter into , Class = " + WorldSpace.CV_CLASS_NAME \
+ " , methode = " + methode_name )
print ( "==================================" )
#*******************************
self.iv_number_of_related_files_from \
= int ( ParametersContainer \
.global_par_number_of_related_files_from )
self.iv_number_of_related_files_to \
= int ( ParametersContainer \
.global_par_number_of_related_files_to )
self.iv_from_z \
= int ( ParametersContainer \
.global_par_from_z )
self.iv_to_z \
= int ( ParametersContainer \
.global_par_to_z )
self.iv_incliment_z \
= int ( ParametersContainer \
.global_par_incliment_z )
#*******************************
self.get_image_data_related_to_z ( self.iv_from_z )
#*****************************************
self.conversion_rate_from_WorldSpace_to_ViewSpace_XY \
= float ( ParametersContainer \
.global_par_conversion_rate_from_WorldSpace_to_ViewSpace_XY )
self.conversion_rate_from_WorldSpace_to_ViewSpace_Z \
= float ( ParametersContainer \
.global_par_conversion_rate_from_WorldSpace_to_ViewSpace_Z )
self.conversion_rate_from_WorldSpace_to_ImageDataSpace \
= float ( ParametersContainer \
.global_par_conversion_rate_from_WorldSpace_to_ImageDataSpace )
margin_value \
= int ( ParametersContainer \
.global_par_margin_value )
#*****************************************
w_x = int ( self.iv_half_width_of_imageData \
/ self.conversion_rate_from_WorldSpace_to_ImageDataSpace )
w_y = int ( self.iv_half_height_of_imageData \
/ self.conversion_rate_from_WorldSpace_to_ImageDataSpace )
self.iv_from_x = 0 - w_x + margin_value
self.iv_to_x = 0 + w_x - margin_value
#*****************************************
self.iv_incliment_x \
= int ( ParametersContainer \
.global_par_incliment_x )
#*****************************************
self.iv_from_y = 0 - w_y + margin_value
self.iv_to_y = 0 + w_y - margin_value
#*****************************************
self.iv_incliment_y \
= int ( ParametersContainer \
.global_par_incliment_y )
#*****************************************
print ( "==================================" )
print ( "Class = " + WorldSpace.CV_CLASS_NAME \
+ " , methode = " + methode_name )
print ( "self.iv_half_width_of_imageData = " \
, self.iv_half_width_of_imageData )
print ( "self.iv_half_height_of_imageData = " \
, self.iv_half_height_of_imageData )
print ( "w_x = " , w_x )
print ( "w_y = " , w_y )
print ( "self.iv_from_x = " , self.iv_from_x )
print ( "self.iv_to_x = " , self.iv_to_x )
print ( "self.iv_from_y = " , self.iv_from_y )
print ( "self.iv_to_y = " , self.iv_to_y )
print ( "==================================" )
#**********************************
self.iv_current_x_of_onePoint_in_WorldSpace = self.iv_from_x
self.iv_current_y_of_onePoint_in_WorldSpace = self.iv_from_y
self.iv_current_z_of_onePoint_in_WorldSpace = self.iv_from_z
self.iv_next_continue = "Y"
self.iv_next_x = self.iv_current_x_of_onePoint_in_WorldSpace
self.iv_next_y = self.iv_current_y_of_onePoint_in_WorldSpace
self.iv_next_z = self.iv_current_z_of_onePoint_in_WorldSpace
print ( "==================================" )
print ( "Exit from , Class = " + WorldSpace.CV_CLASS_NAME \
+ " , methode = " + methode_name )
print ( "==================================" )
#------------------------------------------------------------
def get_image_data_related_to_z ( self \
, arg_z_value ) :
methode_name = "get_image_data_related_to_z"
print ( "==================================" )
print ( "Enter into , Class = " + WorldSpace.CV_CLASS_NAME \
+ " , methode = " + methode_name )
print ( "arg_z_value = " , arg_z_value )
print ( "==================================" )
w_1 = int ( arg_z_value )
file_order_number = w_1
if ( w_1 < self.iv_number_of_related_files_from ) :
file_order_number = self.iv_number_of_related_files_from
if ( w_1 > self.iv_number_of_related_files_to ) :
file_order_number = self.iv_number_of_related_files_to
#----------------------
self.iv_abs_path_of_input_ImageDataFile = \
self.make_abs_path_of_input_ImageDataFile ( \
file_order_number )
self.iv_ins_ImageDataTwoDimensionHandling \
.load_image_data ( \
WorldSpace.CV_CLASS_NAME # arg_requester_module
, methode_name # arg_requester_function"
, self.iv_abs_path_of_input_ImageDataFile )
self.iv_width_of_imageData = \
self.iv_ins_ImageDataTwoDimensionHandling \
.get_width_of_ImageData ( )
self.iv_half_width_of_imageData = \
int ( self.iv_width_of_imageData / 2.0 )
self.iv_height_of_imageData = \
self.iv_ins_ImageDataTwoDimensionHandling \
.get_height_of_ImageData ( )
self.iv_half_height_of_imageData = \
int ( self.iv_height_of_imageData / 2.0 )
print ( "==================================" )
print ( "Class = " + WorldSpace.CV_CLASS_NAME \
+ " , methode = " + methode_name )
print ( "self.iv_width_of_imageData = " \
, self.iv_width_of_imageData )
print ( "self.iv_height_of_imageData = " \
, self.iv_height_of_imageData )
print ( "==================================" )
print ( "==================================" )
print ( "Exit from , Class = " + WorldSpace.CV_CLASS_NAME \
+ " , methode = " + methode_name )
print ( "arg_z_value = " , arg_z_value )
print ( "file_order_number = " , file_order_number )
print ( "==================================" )
#------------------------------------------------------------
def make_abs_path_of_input_ImageDataFile ( self \
, arg_file_order_number ) :
if ( arg_file_order_number < 10 ) :
string_of_file_order_number = "0" + str ( arg_file_order_number )
else :
string_of_file_order_number = str ( arg_file_order_number )
abs_path_of_ImageDataFile \
= ParametersContainer.global_par_abs_path_of_base_directory \
+ ParametersContainer.global_par_path_of_input_directory \
+ ParametersContainer.global_par_path_of_DrawingImageData_directory \
+ ParametersContainer.global_par_file_name_part_1_of_DrawingImageData \
+ "_" + string_of_file_order_number \
+ ParametersContainer.global_par_file_name_ending_part_of_DrawingImageData
return abs_path_of_ImageDataFile
#------------------------------------------------------------
def make_one_point_on_WorldSpace ( self ) :
methode_name = "make_one_point_on_WorldSpace"
return_list = [ \
"Y" #process continue \
, 0 #x \
, 0 #y \
, 0 #z \
#-----
, 0 # Blue \
, 0 # Green \
, 0 # Red \
]
if ( self.iv_next_continue != "Y" ) :
# reached to process end
return_list [ 0 ] = "N"
return return_list
#------------------------
if ( self.iv_current_z_of_onePoint_in_WorldSpace != \
self.iv_next_z ) :
# get imagedata for next z
self.get_image_data_related_to_z ( self.iv_next_z )
#***************************************************
# decide z value for return
self.iv_current_z_of_onePoint_in_WorldSpace = \
self.iv_next_z
w_z = self.iv_current_z_of_onePoint_in_WorldSpace \
* self.conversion_rate_from_WorldSpace_to_ViewSpace_Z
return_list [ 3 ] = w_z
#return_list [ 3 ] = self.iv_current_z_of_onePoint_in_WorldSpace
# decide x and value for return
self.iv_current_x_of_onePoint_in_WorldSpace = \
self.iv_next_x
self.iv_current_y_of_onePoint_in_WorldSpace = \
self.iv_next_y
w_x = self.iv_current_x_of_onePoint_in_WorldSpace \
* self.conversion_rate_from_WorldSpace_to_ViewSpace_XY
w_y = self.iv_current_y_of_onePoint_in_WorldSpace \
* self.conversion_rate_from_WorldSpace_to_ViewSpace_XY
return_list [ 1 ] = w_x
return_list [ 2 ] = w_y
# return_list [ 1 ] = self.iv_current_x_of_onePoint_in_WorldSpace
# return_list [ 2 ] = self.iv_current_y_of_onePoint_in_WorldSpace
#*****************************************************
color_list_for_return = \
self.decide_color ( \
self.iv_current_x_of_onePoint_in_WorldSpace \
, self.iv_current_y_of_onePoint_in_WorldSpace \
)
return_list [ 4 ] = color_list_for_return [ 0 ]
return_list [ 5 ] = color_list_for_return [ 1 ]
return_list [ 6 ] = color_list_for_return [ 2 ]
# decide next x , y , z
self.decide_next_x_y_z ( )
return return_list
#------------------------------------------------------------
def decide_next_x_y_z ( self ) :
methode_name = "decide_next_x_y_z"
self.iv_next_continue = "Y"
self.iv_next_x = self.iv_current_x_of_onePoint_in_WorldSpace
self.iv_next_y = self.iv_current_y_of_onePoint_in_WorldSpace
self.iv_next_z = self.iv_current_z_of_onePoint_in_WorldSpace
w_x = self.iv_current_x_of_onePoint_in_WorldSpace + \
self.iv_incliment_x
if ( w_x <= self.iv_to_x ) :
self.iv_next_x = w_x # x
return
self.iv_next_x = self.iv_from_x # x
w_y = self.iv_current_y_of_onePoint_in_WorldSpace \
+ self.iv_incliment_y
if ( w_y <= self.iv_to_y ) :
self.iv_next_y = w_y # y
return
self.iv_next_y = self.iv_from_y # y
w_z = self.iv_current_z_of_onePoint_in_WorldSpace \
+ self.iv_incliment_z
if ( w_z <= self.iv_to_z ) :
self.iv_next_z = w_z # z
return
else :
self.iv_next_continue = "N"
return
#------------------------------------------------------------
def decide_color ( self , arg_x , arg_y ) :
methode_name = "decide_color"
w_x = arg_x * \
self.conversion_rate_from_WorldSpace_to_ImageDataSpace
w_y = arg_y * \
self.conversion_rate_from_WorldSpace_to_ImageDataSpace
get_x = int ( self.iv_half_width_of_imageData \
+ w_x )
get_y = int ( self.iv_half_height_of_imageData \
+ w_y )
# -------------------------------
return_list = \
self.iv_ins_ImageDataTwoDimensionHandling \
.get_data_of_one_pixel ( \
WorldSpace.CV_CLASS_NAME # arg_requester_module
, methode_name # arg_requester_function
# in the commonly used mathematical XY cordinates
, get_x
, get_y )
return return_list
----------
8 WriteImageToOuterMedia モジュール
ファイル名 [WriteImageToOuterMedia.py]
----------
import datetime
import MakeImageData
import ParametersContainer
MODULE_NAME = "WriteImageToOuterMedia"
#----------------------------------------
def write_image_to_OuterMedia (
arg_ins_ImageDataTwoDimensionHandling
) :
function_name = "write_image_to_OuterMedia"
print ( "==================================" )
print ( "Enter into Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
#get date and time value
date_now = datetime.date.today()
time_now = datetime.datetime.now() \
.time()
date_now_string = str ( date_now )
date_now_string_rewritten = \
date_now_string \
.translate ( \
str.maketrans ( \
{ '.' : '_' \
, '-' : '_' \
} \
) \
)
print ( "date_now_string = " + date_now_string )
print ( "date_now_string_rewritten = " + date_now_string_rewritten )
time_now_string = str ( time_now )
time_now_string_rewritten = \
time_now_string \
.translate ( \
str.maketrans ( \
{ '.' : '_' \
, '-' : '_' \
, ':' : '_' \
} \
) \
)
print ( "time_now_string = " + time_now_string )
print ( "time_now_string_rewritten = " + time_now_string_rewritten )
print ( "date_now = " + str ( date_now ) )
print ( "time_now = " + str ( time_now ) )
if ( ParametersContainer \
.global_par_insert_date_and_time_Y_N == "Y" ) :
#insert date and time into ImageData
arg_ins_ImageDataTwoDimensionHandling \
.insert_text_into_ImageData (
MODULE_NAME
, function_name
# in the commonly used mathematical XY cordinates
, 50 #arg_x_on_ImageData_space
, 30 #arg_y_on_ImageData_space
, #insert String
( str ( date_now ) + " , " + str ( time_now ) )
, 60 # arg_font_color_Blue
, 20 # arg_font_color_Green
, 150 # arg_font_color_Red
)
#-------------------------------------
abs_path_of_output_file \
= ParametersContainer.global_par_abs_path_of_base_directory \
+ ParametersContainer.global_par_path_of_output_directory \
+ ParametersContainer.global_par_path_of_CopyOfDisplayingImageData_directory \
+ ParametersContainer.global_par_file_name_part_1_of_CopyOfDisplayingImageData \
+ "_" \
+ date_now_string_rewritten \
+ "_" \
+ time_now_string_rewritten \
+ ParametersContainer.global_par_file_name_ending_part_of_CopyOfDisplayingImageData
arg_ins_ImageDataTwoDimensionHandling \
.write_loaded_image_data_to_directed_path (
MODULE_NAME #requester module name
, function_name #requester function name
, abs_path_of_output_file )
print ( "==================================" )
print ( "Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "Image Data have been written into directed media" )
print ( "abs_path_of_output_file = " \
+ abs_path_of_output_file )
print ( "==================================" )
print ( "==================================" )
print ( "Exit from Module = " + MODULE_NAME
+ " , function = " + function_name )
print ( "==================================" )
return
----------
[断面画像を重ね合わせて、物体を3次元表示], Python(パイソン) 使って作ってみた ,ソースプログラムリスト あり へ