Removed surfaces module (simply broken and outdated)
This commit is contained in:
parent
f61f7094ed
commit
b1a3621460
|
@ -1071,7 +1071,6 @@ src/Mod/TemplatePyMod/Makefile
|
|||
src/Mod/Sandbox/Makefile
|
||||
src/Mod/Sandbox/App/Makefile
|
||||
src/Mod/Sandbox/Gui/Makefile
|
||||
src/Mod/Surfaces/Makefile
|
||||
src/Mod/Ship/Makefile
|
||||
src/Mod/OpenSCAD/Makefile
|
||||
src/Mod/Plot/Makefile
|
||||
|
|
|
@ -44,7 +44,6 @@ if(FREECAD_BUILD_SANDBOX)
|
|||
add_subdirectory(Sandbox)
|
||||
endif(FREECAD_BUILD_SANDBOX)
|
||||
|
||||
add_subdirectory(Surfaces)
|
||||
add_subdirectory(Ship)
|
||||
add_subdirectory(OpenSCAD)
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ SUBDIRS += Mesh
|
|||
#endif
|
||||
|
||||
if HAVE_OPENCASCADE
|
||||
SUBDIRS += Part Import PartDesign Raytracing Drawing Arch Surfaces Ship OpenSCAD
|
||||
SUBDIRS += Part Import PartDesign Raytracing Drawing Arch Ship OpenSCAD
|
||||
endif
|
||||
|
||||
if HAVE_EIGEN3
|
||||
|
|
|
@ -1,116 +0,0 @@
|
|||
SET(SurfMain_SRCS
|
||||
InitGui.py
|
||||
SurfGui.py
|
||||
)
|
||||
SOURCE_GROUP("" FILES ${SurfMain_SRCS})
|
||||
|
||||
SET(SurfIcons_SRCS
|
||||
Icons/BorderIco.png
|
||||
Icons/BorderIco.xpm
|
||||
Icons/ConvertIco.png
|
||||
Icons/ConvertTo4SidesIco.xpm
|
||||
Icons/Ico.xcf
|
||||
Icons/IsoCurveIco.png
|
||||
Icons/IsoCurveIco.xpm
|
||||
Icons/SliceIco.xcf
|
||||
Icons/BorderIco.xcf
|
||||
Icons/ConvertIco.xcf
|
||||
Icons/Ico.png
|
||||
Icons/Ico.xpm
|
||||
Icons/IsoCurveIco.xcf
|
||||
Icons/SliceIco.png
|
||||
Icons/SliceIco.xpm
|
||||
)
|
||||
SOURCE_GROUP("surficons" FILES ${SurfIcons_SRCS})
|
||||
|
||||
SET(SurfBorder_SRCS
|
||||
surfBorder/__init__.py
|
||||
)
|
||||
SOURCE_GROUP("surfborder" FILES ${SurfBorder_SRCS})
|
||||
|
||||
SET(SurfConvert_SRCS
|
||||
surfConvert/__init__.py
|
||||
surfConvert/Preview.py
|
||||
surfConvert/TaskPanel.py
|
||||
surfConvert/TaskPanel.ui
|
||||
)
|
||||
SOURCE_GROUP("surfconvert" FILES ${SurfConvert_SRCS})
|
||||
|
||||
SET(SurfISOCurve_SRCS
|
||||
surfISOCurve/__init__.py
|
||||
surfISOCurve/PointTracker.py
|
||||
surfISOCurve/TaskPanel.py
|
||||
surfISOCurve/Preview.py
|
||||
surfISOCurve/TaskPanel.ui
|
||||
)
|
||||
SOURCE_GROUP("surfISOcurve" FILES ${SurfISOCurve_SRCS})
|
||||
|
||||
SET(SurfSlice_SRCS
|
||||
surfSlice/__init__.py
|
||||
surfSlice/PointTracker.py
|
||||
surfSlice/TaskPanel.py
|
||||
surfSlice/Preview.py
|
||||
surfSlice/TaskPanel.ui
|
||||
)
|
||||
SOURCE_GROUP("surfslice" FILES ${SurfSlice_SRCS})
|
||||
|
||||
SET(SurfUtils_SRCS
|
||||
surfUtils/__init__.py
|
||||
surfUtils/Geometry.py
|
||||
surfUtils/Math.py
|
||||
surfUtils/Paths.py
|
||||
surfUtils/Translator.py
|
||||
)
|
||||
SOURCE_GROUP("surfutils" FILES ${SurfUtils_SRCS})
|
||||
|
||||
SET(all_files ${SurfMain_SRCS} ${SurfIcons_SRCS} ${SurfBorder_SRCS} ${SurfConvert_SRCS} ${SurfISOCurve_SRCS} ${SurfSlice_SRCS} ${SurfUtils_SRCS})
|
||||
|
||||
ADD_CUSTOM_TARGET(Surfaces ALL
|
||||
SOURCES ${all_files}
|
||||
)
|
||||
|
||||
fc_copy_sources(Surfaces "${CMAKE_BINARY_DIR}/Mod/Surfaces" ${all_files})
|
||||
|
||||
INSTALL(
|
||||
FILES
|
||||
${SurfIcons_SRCS}
|
||||
DESTINATION
|
||||
Mod/Surfaces/Icons
|
||||
)
|
||||
INSTALL(
|
||||
FILES
|
||||
${SurfBorder_SRCS}
|
||||
DESTINATION
|
||||
Mod/Surfaces/surfBorder
|
||||
)
|
||||
INSTALL(
|
||||
FILES
|
||||
${SurfConvert_SRCS}
|
||||
DESTINATION
|
||||
Mod/Surfaces/surfConvert
|
||||
)
|
||||
INSTALL(
|
||||
FILES
|
||||
${SurfISOCurve_SRCS}
|
||||
DESTINATION
|
||||
Mod/Surfaces/surfISOCurve
|
||||
)
|
||||
INSTALL(
|
||||
FILES
|
||||
${SurfSlice_SRCS}
|
||||
DESTINATION
|
||||
Mod/Surfaces/surfSlice
|
||||
)
|
||||
INSTALL(
|
||||
FILES
|
||||
${SurfUtils_SRCS}
|
||||
DESTINATION
|
||||
Mod/Surfaces/surfUtils
|
||||
)
|
||||
INSTALL(
|
||||
FILES
|
||||
${SurfMain_SRCS}
|
||||
DESTINATION
|
||||
Mod/Surfaces
|
||||
)
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 6.7 KiB |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 7.1 KiB |
Binary file not shown.
|
@ -1,749 +0,0 @@
|
|||
/* XPM */
|
||||
static char * Ico_xpm[] = {
|
||||
"128 128 618 2",
|
||||
" c None",
|
||||
". c #EDECEB",
|
||||
"+ c #EFEEEE",
|
||||
"@ c #ECEDEC",
|
||||
"# c #EFEFEF",
|
||||
"$ c #000000",
|
||||
"% c #EAEAEB",
|
||||
"& c #EBEBEA",
|
||||
"* c #E8E8E8",
|
||||
"= c #E1E1E1",
|
||||
"- c #DBDBDB",
|
||||
"; c #D7D6D6",
|
||||
"> c #E6E5E6",
|
||||
", c #E9E8E8",
|
||||
"' c #EEEEED",
|
||||
") c #ECECEC",
|
||||
"! c #EBEBEB",
|
||||
"~ c #E9E9E9",
|
||||
"{ c #E9E9E8",
|
||||
"] c #E5E6E6",
|
||||
"^ c #D7D7D7",
|
||||
"/ c #B2B2B1",
|
||||
"( c #A6A6A6",
|
||||
"_ c #B7B7B7",
|
||||
": c #D1D0D1",
|
||||
"< c #ECEBEB",
|
||||
"[ c #00B5AA",
|
||||
"} c #00B4A8",
|
||||
"| c #00B3A8",
|
||||
"1 c #00B1A8",
|
||||
"2 c #00B0A6",
|
||||
"3 c #00AFA5",
|
||||
"4 c #00AEA4",
|
||||
"5 c #00ACA2",
|
||||
"6 c #00ABA1",
|
||||
"7 c #00AAA0",
|
||||
"8 c #EAEBEA",
|
||||
"9 c #E2E2E2",
|
||||
"0 c #B6B6B6",
|
||||
"a c #979898",
|
||||
"b c #999999",
|
||||
"c c #BCBCBC",
|
||||
"d c #D8D9D8",
|
||||
"e c #EFF0EF",
|
||||
"f c #00BDB2",
|
||||
"g c #00BCB1",
|
||||
"h c #00BBAF",
|
||||
"i c #00B9AF",
|
||||
"j c #00B8AE",
|
||||
"k c #00B7AC",
|
||||
"l c #00B6AB",
|
||||
"m c #00B4AA",
|
||||
"n c #00B1A7",
|
||||
"o c #00AFA4",
|
||||
"p c #00ADA3",
|
||||
"q c #00A99F",
|
||||
"r c #00A79E",
|
||||
"s c #00A79C",
|
||||
"t c #00A59B",
|
||||
"u c #E3E3E2",
|
||||
"v c #B0B1B0",
|
||||
"w c #999898",
|
||||
"x c #949495",
|
||||
"y c #00C2B7",
|
||||
"z c #00C1B6",
|
||||
"A c #00C0B5",
|
||||
"B c #00BFB4",
|
||||
"C c #00BDB3",
|
||||
"D c #00BDB1",
|
||||
"E c #00BBB0",
|
||||
"F c #00BAAF",
|
||||
"G c #00B9AE",
|
||||
"H c #00B8AD",
|
||||
"I c #00B6AC",
|
||||
"J c #00B4A9",
|
||||
"K c #00AEA3",
|
||||
"L c #00A79D",
|
||||
"M c #00A69B",
|
||||
"N c #00A49A",
|
||||
"O c #D7D8D7",
|
||||
"P c #959696",
|
||||
"Q c #A0A1A1",
|
||||
"R c #DFDFE0",
|
||||
"S c #00C3B8",
|
||||
"T c #00C4B8",
|
||||
"U c #00C2B8",
|
||||
"V c #00C1B7",
|
||||
"W c #00C0B4",
|
||||
"X c #00BEB4",
|
||||
"Y c #00BAAE",
|
||||
"Z c #00B7AB",
|
||||
"` c #00B0A5",
|
||||
" . c #00AEA5",
|
||||
".. c #00ABA2",
|
||||
"+. c #00A99E",
|
||||
"@. c #00A89E",
|
||||
"#. c #00A69C",
|
||||
"$. c #00A59A",
|
||||
"%. c #00A399",
|
||||
"&. c #00A298",
|
||||
"*. c #EAEAEA",
|
||||
"=. c #C6C5C5",
|
||||
"-. c #9C9B9B",
|
||||
";. c #9A9A9A",
|
||||
">. c #959495",
|
||||
",. c #B5B6B6",
|
||||
"'. c #E6E6E6",
|
||||
"). c #00C5B9",
|
||||
"!. c #00BEB3",
|
||||
"~. c #00B5A9",
|
||||
"{. c #00B2A7",
|
||||
"]. c #00B1A6",
|
||||
"^. c #00A098",
|
||||
"/. c #DADBDB",
|
||||
"(. c #A8A8A8",
|
||||
"_. c #9B9A9A",
|
||||
":. c #989898",
|
||||
"<. c #9E9F9F",
|
||||
"[. c #D8D8D8",
|
||||
"}. c #E5E5E5",
|
||||
"|. c #00C3B7",
|
||||
"1. c #00C6BA",
|
||||
"2. c #00C6B9",
|
||||
"3. c #00C5BA",
|
||||
"4. c #00C5B8",
|
||||
"5. c #00BCB2",
|
||||
"6. c #00BCB0",
|
||||
"7. c #00B8AC",
|
||||
"8. c #00B3A9",
|
||||
"9. c #00ADA2",
|
||||
"0. c #00A398",
|
||||
"a. c #00A198",
|
||||
"b. c #00A097",
|
||||
"c. c #B6B5B5",
|
||||
"d. c #989998",
|
||||
"e. c #9C9D9C",
|
||||
"f. c #959596",
|
||||
"g. c #BDBDBD",
|
||||
"h. c #00C2B6",
|
||||
"i. c #00C7BB",
|
||||
"j. c #00C8BB",
|
||||
"k. c #00C6BB",
|
||||
"l. c #00C4B9",
|
||||
"m. c #00BFB3",
|
||||
"n. c #00B7AD",
|
||||
"o. c #00ACA1",
|
||||
"p. c #00A59C",
|
||||
"q. c #00A49B",
|
||||
"r. c #009E96",
|
||||
"s. c #E4E4E4",
|
||||
"t. c #BABBBA",
|
||||
"u. c #9C9C9C",
|
||||
"v. c #9E9E9E",
|
||||
"w. c #9B9B9C",
|
||||
"x. c #AAAAAA",
|
||||
"y. c #DCDCDB",
|
||||
"z. c #00C1B5",
|
||||
"A. c #00C8BD",
|
||||
"B. c #00C9BD",
|
||||
"C. c #00C9BC",
|
||||
"D. c #00C8BC",
|
||||
"E. c #00B2A8",
|
||||
"F. c #00AFA6",
|
||||
"G. c #00A197",
|
||||
"H. c #009F96",
|
||||
"I. c #E4E5E4",
|
||||
"J. c #B9B9B8",
|
||||
"K. c #A0A09F",
|
||||
"L. c #9D9D9D",
|
||||
"M. c #9F9F9F",
|
||||
"N. c #D8D8D9",
|
||||
"O. c #00C7BA",
|
||||
"P. c #00CABE",
|
||||
"Q. c #00CBBF",
|
||||
"R. c #00CBBE",
|
||||
"S. c #00C9BE",
|
||||
"T. c #00C7BC",
|
||||
"U. c #00BBB1",
|
||||
"V. c #00BAB0",
|
||||
"W. c #00AAA1",
|
||||
"X. c #00A89D",
|
||||
"Y. c #13A79E",
|
||||
"Z. c #03A097",
|
||||
"`. c #009D94",
|
||||
" + c #9F9FA0",
|
||||
".+ c #A2A1A1",
|
||||
"++ c #A0A0A0",
|
||||
"@+ c #D0D0D0",
|
||||
"#+ c #00C0B6",
|
||||
"$+ c #00CCC0",
|
||||
"%+ c #00CABD",
|
||||
"&+ c #26ABA4",
|
||||
"*+ c #10A39C",
|
||||
"=+ c #009E94",
|
||||
"-+ c #AEAEAE",
|
||||
";+ c #A1A1A2",
|
||||
">+ c #A2A3A2",
|
||||
",+ c #A0A1A0",
|
||||
"'+ c #D2D2D3",
|
||||
")+ c #00CABF",
|
||||
"!+ c #00CEC1",
|
||||
"~+ c #00CDC2",
|
||||
"{+ c #00CDC1",
|
||||
"]+ c #00CBC0",
|
||||
"^+ c #00ABA0",
|
||||
"/+ c #00A9A0",
|
||||
"(+ c #46B5AF",
|
||||
"_+ c #63BCB6",
|
||||
":+ c #009E95",
|
||||
"<+ c #009C93",
|
||||
"[+ c #009A92",
|
||||
"}+ c #D3D3D4",
|
||||
"|+ c #A8A7A7",
|
||||
"1+ c #A5A4A4",
|
||||
"2+ c #A4A5A5",
|
||||
"3+ c #A2A2A2",
|
||||
"4+ c #A3A3A2",
|
||||
"5+ c #D7D7D6",
|
||||
"6+ c #00CFC2",
|
||||
"7+ c #00A69D",
|
||||
"8+ c #0BA59B",
|
||||
"9+ c #9DCAC7",
|
||||
"0+ c #2DAAA2",
|
||||
"a+ c #BABABA",
|
||||
"b+ c #A7A7A7",
|
||||
"c+ c #A6A7A6",
|
||||
"d+ c #A5A6A6",
|
||||
"e+ c #A3A3A3",
|
||||
"f+ c #DEDEDE",
|
||||
"g+ c #00CEC2",
|
||||
"h+ c #00BEB2",
|
||||
"i+ c #00ADA4",
|
||||
"j+ c #00A39A",
|
||||
"k+ c #06A29A",
|
||||
"l+ c #9FCBC8",
|
||||
"m+ c #8FC4C1",
|
||||
"n+ c #17A39B",
|
||||
"o+ c #009B92",
|
||||
"p+ c #009990",
|
||||
"q+ c #CACACA",
|
||||
"r+ c #AEAEAD",
|
||||
"s+ c #A9A9A9",
|
||||
"t+ c #A8A9A8",
|
||||
"u+ c #A4A4A4",
|
||||
"v+ c #B6B5B6",
|
||||
"w+ c #00CCBF",
|
||||
"x+ c #47B2AC",
|
||||
"y+ c #CCD3D4",
|
||||
"z+ c #9EC8C5",
|
||||
"A+ c #16A19A",
|
||||
"B+ c #00988F",
|
||||
"C+ c #DEDDDD",
|
||||
"D+ c #AFAEAF",
|
||||
"E+ c #ABACAC",
|
||||
"F+ c #ACACAB",
|
||||
"G+ c #A9A8A8",
|
||||
"H+ c #A7A6A6",
|
||||
"I+ c #CDCDCE",
|
||||
"J+ c #23A9A1",
|
||||
"K+ c #B5CFCE",
|
||||
"L+ c #D6D6D6",
|
||||
"M+ c #BFD0CE",
|
||||
"N+ c #93C6C3",
|
||||
"O+ c #3FABA5",
|
||||
"P+ c #1C1D1D",
|
||||
"Q+ c #1D1D1D",
|
||||
"R+ c #292929",
|
||||
"S+ c #DBDBDA",
|
||||
"T+ c #DADADA",
|
||||
"U+ c #C7C6C7",
|
||||
"V+ c #ADADAD",
|
||||
"W+ c #AEAEAF",
|
||||
"X+ c #ACACAC",
|
||||
"Y+ c #ACABAB",
|
||||
"Z+ c #ABABAB",
|
||||
"`+ c #A9AAA9",
|
||||
" @ c #A5A5A6",
|
||||
".@ c #D0D0CF",
|
||||
"+@ c #00B9AD",
|
||||
"@@ c #00B6AA",
|
||||
"#@ c #019F95",
|
||||
"$@ c #56B4AE",
|
||||
"%@ c #C5D0D0",
|
||||
"&@ c #D1D2D2",
|
||||
"*@ c #CDCDCD",
|
||||
"=@ c #D2D2D2",
|
||||
"-@ c #D0D2D2",
|
||||
";@ c #C0C0C0",
|
||||
">@ c #D3D3D2",
|
||||
",@ c #CBCCCC",
|
||||
"'@ c #BEBFBE",
|
||||
")@ c #B0AFB0",
|
||||
"!@ c #B1B1B0",
|
||||
"~@ c #B0B0AF",
|
||||
"{@ c #ABAAAB",
|
||||
"]@ c #AAAAAB",
|
||||
"^@ c #A6A5A5",
|
||||
"/@ c #B5B5B5",
|
||||
"(@ c #D0D1D0",
|
||||
"_@ c #D5D6D5",
|
||||
":@ c #009F95",
|
||||
"<@ c #049D95",
|
||||
"[@ c #73BAB7",
|
||||
"}@ c #CCD1D1",
|
||||
"|@ c #C8C8C9",
|
||||
"1@ c #C2C2C2",
|
||||
"2@ c #C2C3C3",
|
||||
"3@ c #C1C1C1",
|
||||
"4@ c #B8B8B8",
|
||||
"5@ c #B4B4B4",
|
||||
"6@ c #B4B4B5",
|
||||
"7@ c #B3B3B3",
|
||||
"8@ c #B2B2B2",
|
||||
"9@ c #B1B1B1",
|
||||
"0@ c #AFAEAE",
|
||||
"a@ c #ADAEAE",
|
||||
"b@ c #ACACAD",
|
||||
"c@ c #AAA9A9",
|
||||
"d@ c #BBBCBC",
|
||||
"e@ c #D1D1D1",
|
||||
"f@ c #00B0A7",
|
||||
"g@ c #00A89F",
|
||||
"h@ c #059C94",
|
||||
"i@ c #7ABEB9",
|
||||
"j@ c #BDCCCC",
|
||||
"k@ c #CBCACB",
|
||||
"l@ c #C2C1C1",
|
||||
"m@ c #BBBBBB",
|
||||
"n@ c #B8B9B8",
|
||||
"o@ c #B8B9B9",
|
||||
"p@ c #B4B5B5",
|
||||
"q@ c #B3B4B4",
|
||||
"r@ c #B2B3B3",
|
||||
"s@ c #B0B0B0",
|
||||
"t@ c #AFAFAF",
|
||||
"u@ c #AAA9AA",
|
||||
"v@ c #D3D3D3",
|
||||
"w@ c #00A096",
|
||||
"x@ c #059B92",
|
||||
"y@ c #29A69E",
|
||||
"z@ c #ACC8C7",
|
||||
"A@ c #D2D1D1",
|
||||
"B@ c #CCCCCD",
|
||||
"C@ c #C4C4C4",
|
||||
"D@ c #C0BFBF",
|
||||
"E@ c #BBBCBB",
|
||||
"F@ c #B2B3B2",
|
||||
"G@ c #AEADAD",
|
||||
"H@ c #ADACAD",
|
||||
"I@ c #00ACA3",
|
||||
"J@ c #009D93",
|
||||
"K@ c #009B91",
|
||||
"L@ c #00968E",
|
||||
"M@ c #3CA7A1",
|
||||
"N@ c #8EBFBD",
|
||||
"O@ c #BDCCCB",
|
||||
"P@ c #C1C0C0",
|
||||
"Q@ c #C4C3C3",
|
||||
"R@ c #C6C6C6",
|
||||
"S@ c #BAB9B9",
|
||||
"T@ c #ADACAC",
|
||||
"U@ c #C8C8C8",
|
||||
"V@ c #020B0A",
|
||||
"W@ c #00B5AB",
|
||||
"X@ c #00A299",
|
||||
"Y@ c #009A91",
|
||||
"Z@ c #00978E",
|
||||
"`@ c #00958C",
|
||||
" # c #04958D",
|
||||
".# c #1B9B93",
|
||||
"+# c #353535",
|
||||
"@# c #414141",
|
||||
"## c #464646",
|
||||
"$# c #CECECE",
|
||||
"%# c #C4C4C3",
|
||||
"&# c #B1B2B1",
|
||||
"*# c #C9C9C9",
|
||||
"=# c #00BFB5",
|
||||
"-# c #009C94",
|
||||
";# c #009B93",
|
||||
"># c #00968D",
|
||||
",# c #00958B",
|
||||
"'# c #00938A",
|
||||
")# c #009189",
|
||||
"!# c #009088",
|
||||
"~# c #CCCCCC",
|
||||
"{# c #B1B2B2",
|
||||
"]# c #ADAEAD",
|
||||
"^# c #CBCCCB",
|
||||
"/# c #009890",
|
||||
"(# c #00958D",
|
||||
"_# c #00948B",
|
||||
":# c #009289",
|
||||
"<# c #009188",
|
||||
"[# c #BFBFBF",
|
||||
"}# c #CCCBCB",
|
||||
"|# c #CFCFCE",
|
||||
"1# c #00948A",
|
||||
"2# c #008F88",
|
||||
"3# c #008E86",
|
||||
"4# c #CDCECE",
|
||||
"5# c #BEBEBE",
|
||||
"6# c #B7B7B8",
|
||||
"7# c #B6B6B5",
|
||||
"8# c #B3B2B2",
|
||||
"9# c #B1B0B0",
|
||||
"0# c #AFAFB0",
|
||||
"a# c #00998F",
|
||||
"b# c #00988E",
|
||||
"c# c #00948C",
|
||||
"d# c #008F87",
|
||||
"e# c #B9B8B9",
|
||||
"f# c #B6B7B6",
|
||||
"g# c #B4B3B3",
|
||||
"h# c #B2B1B1",
|
||||
"i# c #ADADAE",
|
||||
"j# c #ACADAD",
|
||||
"k# c #C0C1C0",
|
||||
"l# c #008D86",
|
||||
"m# c #008C84",
|
||||
"n# c #C3C4C4",
|
||||
"o# c #B9BAB9",
|
||||
"p# c #B0B0B1",
|
||||
"q# c #CBCBC9",
|
||||
"r# c #00AA9F",
|
||||
"s# c #00928A",
|
||||
"t# c #008D85",
|
||||
"u# c #008B83",
|
||||
"v# c #B7B8B7",
|
||||
"w# c #B7B7B6",
|
||||
"x# c #B1B0B1",
|
||||
"y# c #C5C5C5",
|
||||
"z# c #00968C",
|
||||
"A# c #C5C6C6",
|
||||
"B# c #C0C1C1",
|
||||
"C# c #BABBBB",
|
||||
"D# c #BABAB9",
|
||||
"E# c #B8B7B7",
|
||||
"F# c #B7B6B7",
|
||||
"G# c #B5B4B4",
|
||||
"H# c #B3B2B3",
|
||||
"I# c #B1B1B2",
|
||||
"J# c #ACADAE",
|
||||
"K# c #009F97",
|
||||
"L# c #009991",
|
||||
"M# c #009389",
|
||||
"N# c #008F86",
|
||||
"O# c #008E85",
|
||||
"P# c #008B84",
|
||||
"Q# c #008981",
|
||||
"R# c #BCBBBC",
|
||||
"S# c #B9B9B9",
|
||||
"T# c #B8B8B9",
|
||||
"U# c #00938B",
|
||||
"V# c #008D84",
|
||||
"W# c #008C83",
|
||||
"X# c #008A82",
|
||||
"Y# c #008880",
|
||||
"Z# c #C4C3C4",
|
||||
"`# c #B7B8B8",
|
||||
" $ c #AFAFB1",
|
||||
".$ c #00A499",
|
||||
"+$ c #008B82",
|
||||
"@$ c #00877F",
|
||||
"#$ c #C1C2C1",
|
||||
"$$ c #B9B8B8",
|
||||
"%$ c #B5B5B4",
|
||||
"&$ c #B4B4B3",
|
||||
"*$ c #B2B1B3",
|
||||
"=$ c #009087",
|
||||
"-$ c #008780",
|
||||
";$ c #00867E",
|
||||
">$ c #C2C3C2",
|
||||
",$ c #B9B9BA",
|
||||
"'$ c #B2B1B2",
|
||||
")$ c #008A81",
|
||||
"!$ c #00867D",
|
||||
"~$ c #C0C0C1",
|
||||
"{$ c #BFBEBE",
|
||||
"]$ c #BEBDBD",
|
||||
"^$ c #BDBCBD",
|
||||
"/$ c #BFC0C0",
|
||||
"($ c #C1C3C2",
|
||||
"_$ c #009C92",
|
||||
":$ c #009288",
|
||||
"<$ c #00847D",
|
||||
"[$ c #00847B",
|
||||
"}$ c #BBBBBC",
|
||||
"|$ c #BAB9BA",
|
||||
"1$ c #B6B6B7",
|
||||
"2$ c #B3B3B2",
|
||||
"3$ c #BFC0BF",
|
||||
"4$ c #008982",
|
||||
"5$ c #00857E",
|
||||
"6$ c #00847C",
|
||||
"7$ c #00837B",
|
||||
"8$ c #BEBEBF",
|
||||
"9$ c #BDBCBC",
|
||||
"0$ c #BCBCBB",
|
||||
"a$ c #B3B4B3",
|
||||
"b$ c #00877E",
|
||||
"c$ c #00857D",
|
||||
"d$ c #00837C",
|
||||
"e$ c #00827A",
|
||||
"f$ c #B7B6B6",
|
||||
"g$ c #00978D",
|
||||
"h$ c #00837A",
|
||||
"i$ c #008178",
|
||||
"j$ c #BFBFBE",
|
||||
"k$ c #BDBEBC",
|
||||
"l$ c #00978F",
|
||||
"m$ c #008980",
|
||||
"n$ c #008179",
|
||||
"o$ c #007F78",
|
||||
"p$ c #C1C1C2",
|
||||
"q$ c #008E87",
|
||||
"r$ c #00817A",
|
||||
"s$ c #C2C2C1",
|
||||
"t$ c #C0BFC0",
|
||||
"u$ c #BDBEBE",
|
||||
"v$ c #BBBBBA",
|
||||
"w$ c #B9BABA",
|
||||
"x$ c #009D95",
|
||||
"y$ c #00867F",
|
||||
"z$ c #008078",
|
||||
"A$ c #007E78",
|
||||
"B$ c #007D76",
|
||||
"C$ c #C3C3C3",
|
||||
"D$ c #BBBABA",
|
||||
"E$ c #009A90",
|
||||
"F$ c #008279",
|
||||
"G$ c #007E77",
|
||||
"H$ c #007D75",
|
||||
"I$ c #C0C0BF",
|
||||
"J$ c #BFBEBF",
|
||||
"K$ c #BBBABB",
|
||||
"L$ c #00887F",
|
||||
"M$ c #00827B",
|
||||
"N$ c #008079",
|
||||
"O$ c #007B75",
|
||||
"P$ c #BABABB",
|
||||
"Q$ c #007C75",
|
||||
"R$ c #007B73",
|
||||
"S$ c #007A72",
|
||||
"T$ c #C3C2C2",
|
||||
"U$ c #BFBFC0",
|
||||
"V$ c #BEBDBE",
|
||||
"W$ c #BCBBBB",
|
||||
"X$ c #00857C",
|
||||
"Y$ c #007D77",
|
||||
"Z$ c #007C76",
|
||||
"`$ c #007B74",
|
||||
" % c #007A73",
|
||||
".% c #007972",
|
||||
"+% c #C3C4C3",
|
||||
"@% c #C5C5C6",
|
||||
"#% c #BEBFBF",
|
||||
"$% c #007871",
|
||||
"%% c #BCBDBC",
|
||||
"&% c #C4C5C4",
|
||||
"*% c #C6C6C5",
|
||||
"=% c #007770",
|
||||
"-% c #00766F",
|
||||
";% c #C3C2C3",
|
||||
">% c #008C85",
|
||||
",% c #007F77",
|
||||
"'% c #007872",
|
||||
")% c #00766E",
|
||||
"!% c #C8C7C7",
|
||||
"~% c #C7C6C6",
|
||||
"{% c #C5C5C4",
|
||||
"]% c #C2C0C1",
|
||||
"^% c #B3B3B4",
|
||||
"/% c #007E76",
|
||||
"(% c #007870",
|
||||
"_% c #00756F",
|
||||
":% c #00756D",
|
||||
"<% c #C9C8C8",
|
||||
"[% c #C5C4C4",
|
||||
"}% c #007A74",
|
||||
"|% c #007971",
|
||||
"1% c #00746E",
|
||||
"2% c #00746D",
|
||||
"3% c #C7C7C7",
|
||||
"4% c #008881",
|
||||
"5% c #00756E",
|
||||
"6% c #00746C",
|
||||
"7% c #00736C",
|
||||
"8% c #00716A",
|
||||
"9% c #C8C9C8",
|
||||
"0% c #00716B",
|
||||
"a% c #C6C7C7",
|
||||
"b% c #CACBCA",
|
||||
"c% c #C9C8CA",
|
||||
"d% c #007771",
|
||||
"e% c #00726B",
|
||||
"f% c #006F69",
|
||||
"g% c #007670",
|
||||
"h% c #007069",
|
||||
"i% c #006E68",
|
||||
"j% c #000303",
|
||||
"k% c #007169",
|
||||
"l% c #007068",
|
||||
"m% c #006D67",
|
||||
"n% c #AEAFAE",
|
||||
"o% c #00736B",
|
||||
"p% c #00726A",
|
||||
"q% c #A9A9A8",
|
||||
"r% c #CFCFCF",
|
||||
"s% c #C5C4C5",
|
||||
"t% c #007973",
|
||||
"u% c #00736D",
|
||||
"v% c #006F68",
|
||||
"w% c #B0AEB0",
|
||||
"x% c #00726C",
|
||||
"y% c #006D68",
|
||||
"z% c #007C74",
|
||||
"A% c #00706A",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" . + @ # ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ % & * * = - ; > , ' ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) ! ~ { { ~ ] ^ / ( _ : ~ < ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ [ } | 1 2 3 4 5 6 7 $ $ $ $ $ $ 8 9 0 a b c d e ",
|
||||
" $ $ $ $ $ $ $ $ $ $ f f g h i j k l m | | n 2 o p 5 6 q r s t $ $ $ $ u v w x ( ^ 8 ",
|
||||
" $ $ $ $ $ $ $ $ y z z A A B C D E F G H I l J | n n 3 K 5 6 q q L M N $ $ $ $ O ( b P Q R * ",
|
||||
" $ $ $ $ $ $ S S S T S U V V z W X C g E Y G H Z [ J | n ` .p ..7 +.@.#.$.%.&.$ $ $ *.=.-.;.>.,.'. ",
|
||||
" $ $ $ $ $ U T T T ).).).T T S U V z B !.!.g F Y H I l ~.| {.].3 p 5 6 q @.s t %.&.^.$ $ $ /.(._.:.<.[.}. ",
|
||||
" $ $ $ $ y |.T ).).1.1.1.1.2.3.4.T y y A B !.5.6.F j 7.Z [ 8.1 2 3 4 9.6 7 +.s t N 0.a.b.$ $ $ * c.d.e.f.g.'. ",
|
||||
" $ $ $ $ A h.|.S 4.2.1.i.i.j.i.i.k.2.l.T y z A m.f g E i n.Z [ } | n 2 4 p o.7 +.L p.q.0.&.b.r.$ $ s.t.u.v.w.x.y. ",
|
||||
" $ $ $ !.B z.y S T 1.i.j.A.B.B.C.B.D.k.3.4.S y z W !.f E Y G k [ J | E.F.o p o.7 q L M q.%.&.G.H.$ $ $ I.J.u.K.L.M.N. ",
|
||||
" $ $ $ $ m.A h.S T 2.O.D.B.P.Q.Q.R.S.B.T.O.).T U V A !.f U.V.j n.l m | {.2 o 4 5 W.q X.#.t %.a.Y.Z.`.$ $ $ 9 0 +.+++e.@+u ",
|
||||
" $ $ $ $ #+h.S 4.1.T.C.P.Q.$+$+$+Q.%+D.i.1.T |.h.A !.f g h G H l ~.} E.2 3 p 5 7 q r #.N %.&.&+*+=+`.$ $ - -+;+>+Q ,+'+ ",
|
||||
" $ $ $ y T ).1.D.B.)+$+!+~+{+]+P.B.j.1.T S y A B !.g h G H l J | E.n 3 p p ^+/+@.#.t %.&.(+_+:+<+[+$ $ 9 }+|+1+2+3+4+5+ ",
|
||||
" $ $ y T ).O.D.%+)+$+~+6+{+$+P.B.T.1.).S y A B f g F G H I [ 8.{.n .4 5 6 /+X.7+t %.&.8+9+0+<+[+$ $ $ - a+b+c+d+e+-+f+ ",
|
||||
" $ $ $ T ).1.D.S.Q.$+{+g+{+$+R.A.D.1.).S z z.B h+6.F G 7.Z ~.8.E.].3 i+5 7 q @.#.t j+&.k+l+m+n+o+p+$ $ f+q+r+s+t+b+u+v+f+ ",
|
||||
" $ $ $ l.2.D.C.%+Q.$+$+w+Q.P.D.i.1.l.S y A X f U.F G H l J } E.2 3 p o.6 q r #.$.%.&.G.x+y+z+A+p+B+$ $ C+q+D+E+F+x.G+H+|+I+O ",
|
||||
" $ $ $ 3.i.D.B.P.P.Q.)+P.B.D.O.).T S z A m.f E F G 7.l J | {.2 .p ..6 q L #.q.%.&.G.J+K+L+M+N+O+P+Q+R+ S+T+U+V+W+V+X+Y+Z+`+ @-+.@L+ ",
|
||||
" $ $ 4.1.k.j.A.B.B.B.C.j.i.).T S y A B !.f U.F +@k @@J | n 2 o p ..W.q @.t N %.a.b.#@$@%@&@*@=@-@;@}+>@,@'@)@/ !@~@D+V+X+{@]@^@/@(@_@ ",
|
||||
" $ $ $ ).1.O.D.D.i.D.j.1.2.l.S |.z A m.C g E Y H k [ 8.| n ` 4 9.o.7 q L t q.%.a.b.:@<@[@}@|@1@;@2@3@g.4@5@6@7@8@9@)@0@a@b@E+c@H+d@e@ ",
|
||||
" $ $ T ).).3.1.k.O.1.).4.T |.z A W !.f U.F +@7.l [ | E.f@` 4 5 W./+g@L p.N %.a.H.:+`.h@i@j@k@l@m@n@o@_ _ p@5@q@r@9@s@t@-+V+E+u@b+;@v@ ",
|
||||
" $ $ $ S T T ).).T l.T S |.y #+W X f g h G H Z @@J | 1 2 3 i+5 7 q X.s t N &.^.w@:+<+o+x@y@z@A@B@C@D@a+m@E@4@/@5@7@F@s@t@0@G@H@{@(.=.A@ ",
|
||||
" $ $ y U S S S S S U y z A A m.C g E F G n.Z [ 8.| n 2 4 I@5 W.q r #.q.%.&.a.H.`.J@K@p+B+L@M@N@O@P@Q@e@v@R@S@/@5@7@8@9@~@t@G@T@x.T@U@e@ ",
|
||||
" V@$ $ z y V y y h.V z.A B m.!.D 6.F G H Z W@J | E.2 3 4 I@6 7 @.s M $.X@&.^.:@=+<+Y@p+Z@L@`@ #.#+#@### $#%#4@0 /@5@7@9@s@t@-+a@x.&#*#.@ ",
|
||||
" $ $ A A z.A z #+=#A m.!.!.D 6.F G j k l m | | n 2 4 p 5 7 q r L t N &.a.b.:+-#;#Y@p+Z@>#,#'#)#!#$ $ ~#3@4@_ /@5@r@{#9@s@W+]#x.0 ^#$# ",
|
||||
" $ $ $ B B B B B X !.f f g E V.F j k l [ J | 1 ].3 4 5 6 7 @.L #.q.%.&.^.H.:+J@o+Y@/#Z@(#_#:#<#!#$ $ $ q+[#4@_ 0 /@q@8@&#s@t@-+c@m@}#|# ",
|
||||
" $ $ !.!.!.!.h+f D g 6.E F G H H l [ ~.| E.].F. .p 5 7 q @.s M N X@a.b.:@`.<+Y@p+B+>#`@1#:#<#2#3#$ $ 4#U@5#4@6#7#c.5@8#9@9#0#-+]@5#q+ ",
|
||||
" $ $ $ g g g g 6.E h F G j H k Z @@J | | n 2 o p 5 6 7 @.X.#.t %.X@a.H.:+`.;#Y@a#b#>#c#'#:#!#d#3#$ $ ~#R@c e#4@f#0 5@g#8@h#s@i#j#k#k@ ",
|
||||
" $ $ E F E V.h Y Y G H k k l [ J | E.n 2 3 4 9.6 W.q @.L t N %.&.b.:@=+J@o+p+B+Z@(#_#'#<#!#3#l#m#$ $ q+n#c o#n@_ 0 /@7@8#9@p#W+s@1@q# ",
|
||||
" $ $ G i G G +@+@H k k I @@J J | E.{.2 3 4 p 5 6 r#@.L M $.%.X@a.b.:+J@<+o+p+b#>#`@1#s#<#!#3#t#u#$ $ U@2@d@a+4@v#w#0 q@r@9@x#-+7@y#*# ",
|
||||
" $ $ H 7.7.H k k l [ [ ~.} E.E.n 2 3 4 p 5 6 /++.L L t %.&.&.b.H.:+J@o+Y@a#Z@z#_#'#<#<#d#3#t#u#$ $ $ A#B#d@C#D#E#F#,.G#7@H#I#J#F#y#U@ ",
|
||||
" $ $ Z l l l l W@[ J } | E.{.].F.3 4 p I@^+7 +.X.#.M $.%.&.a.K#:@`.;#[+L#B+>#`@_#M#<#!#N#O#P#u#Q#$ $ y#;@R#m@S#T#_ 0 /@5@r@/ -+S#=. ",
|
||||
" $ $ $ [ [ J J J 8.| E.{.n ].2 3 4 p 5 6 7 q @.L #.q.%.&.a.w@r.`.J@o+p+p+Z@>#_#U#:#!#d#3#V#W#X#Y#$ $ Z#[#c m@S#T#`#f#,.p@7@h# $m@y# ",
|
||||
" $ $ } | 8.E.| E.1 n n 2 3 4 K I@5 6 /+q r L #.$..$X@a.b.H.:+-#o+Y@a#Z@>#`@'#'#<#!#3#l#m#+$Q#Y#@$$ $ C@#$5#g.c a+S@$$_ v+%$&$*$9@g.%# ",
|
||||
" $ $ E.E.E.n n ].].F.3 4 K p 5 ..6 7 +.@.L #.t N %.&.b.H.:+`.<+o+L#B+Z@>#_#U#:#!#=$3#m#u#X#Q#-$;$$ $ >$3@[#g.c a+,$n@_ ,./@5@'$g#;@C@ ",
|
||||
" $ $ $ f@2 2 2 ` 3 4 K p p 5 6 ^+/+g@@.L #.t N %.&.a.b.:@:+`.o+L#B+b#L@c#U#:#)#2#N#3#m#X#)$Y#@$!$$ $ $ 3@~${$]$^$m@a+S#4@f#,.5@8@/@/$($ ",
|
||||
" $ $ 3 3 4 4 4 K p I@5 5 6 q q @.r #.M t N %.&.G.K#r.=+<+_$K@p+B+L@(#,#'#:$<#d#l#V#W#X#Q#@$;$<$[$$ $ ;@3@[#5#g.}$C#|$4@_ 1$/@2$7#3$3@ ",
|
||||
" $ $ p i+K p 9.5 o.6 W.7 r#+.r L #.t q.N 0.a.G.b.:+=+J@;#Y@p+B+Z@z#`@1#:#<#=$3#t#m#u#4$Y#@$5$6$7$$ $ [#P@;@8$g.9$0$|$S#_ 0 /@a$E#;@ ",
|
||||
" $ $ 5 5 ....o.6 6 /+q q @.L #.#.p.N %.0.&.G.K#r.=+-#<+Y@L#B+Z@>#`@_#'#:#!#d#3#t#u#X#Q#-$b$c$d$e$$ $ $ [#;@;@[#]$c R#a+,$n@f$0 a$S#{$ ",
|
||||
" $ $ 6 W.7 r#q q +.@.L L #.#.q.j+%.0.a.G.w@:@:+`.;#o+L#B+B+g$(#_#'#)#<#d#3#t#P#X#Q#Y#@$!$6$h$e$i$$ $ g.{$B#k#D@j$k$0$a+S@n@_ 0 /@m@]$ ",
|
||||
" $ $ q q q g@@.r L L #.M t N .$0.&.a.b.H.:@`.<+;#[+Y@B+l$g$`@_#'#:#<#!#d#l#m#u#X#m$-$;$c$7$e$n$o$$ $ c '@3@p$;@5#g.c m@a+S#`#0 1$C#c ",
|
||||
" $ $ L r L #.s s M p.$.N %.%.0.a.a.b.H.:+`.`._$Y@p+a#b#g$(#_#'#'#)#!#q$3#V#u#X#Q#-$b$c$6$7$r$i$o$$ $ $ C#8$#$s$;@t$u$g.m@v$w$4@_ 1$v$0$ ",
|
||||
" $ $ $ #.#.#.t t q.N %.%.&.&.a.b.w@r.:+x$<+o+K@p+p+Z@>#z#c#'#s#:$<#d#3#t#P#X#)$Y#y$;$<$d$e$i$z$A$B$$ $ a+3$C$l@k#[#'@^$c m@S#e#_ F#a+D$ ",
|
||||
" $ $ N N N .$j+%.%.&.&.a.b.K#H.H.`.-#<+o+Y@E$a#Z@L@(#,#'#M#<#!#d#3#t#u#X#Q#Y#@$;$c$6$h$F$z$o$G$H$$ $ a+I$Q@1@;@;@J$g.c m@K$4@_ 4@S# ",
|
||||
" $ $ j+X@&.X@&.&.a.^.G.K#H.:@:+J@J@o+[+Y@p+B+Z@>#z#,#U#:#<#<#!#N#t#m#u#X#Q#L$;$c$6$M$e$N$o$G$B$O$$ $ $ a+k#C@C$l@;@/$5#g.c P$S@4@4@4@ ",
|
||||
" $ $ a.a.a.^.a.b.b.H.H.:+`.`.<+o+o+K@L#p+B+Z@>#`@_#'#:#)#<#2#3#t#m#u#X#Q#-$@$5$6$[$e$i$o$G$B$Q$R$S$$ $ v+,$T$y#C$1@3@U$J$V$c W$|$S#_ 4@ ",
|
||||
" $ $ $ b.b.K#w@:@:+:+`.-#`._$o+K@Y@p+B+Z@L@z#`@_#'#M#<#<#=$q$t#m#u#X#Q#Y#@$5$X$d$e$F$z$A$Y$Z$`$ %.%$ $ 5@C#+%@%C$>$3@;@#%5#g.E@t.S#_ v+ ",
|
||||
" $ $ :@H.:+=+:+`.-#<+_$o+[+E$p+B+B+L@>#(#`@U#'#:$<#!#d#3#O#V#u#X#)$Y#@$;$c$6$7$F$z$o$G$H$Q$R$.%$%$ $ q@%%&%*%n#C$1@3@[#]$g.d@K$,$0 5@ ",
|
||||
" $ $ `.`.`.<+_$;#o+K@K@E$p+a#l$B+>#>#c#,#1#:#:#<#2#d#3#t#m#u#+$Q#Y#@$;$c$6$7$r$N$z$A$B$Q$`$.%.%=%-%$ $ 5@]$R@R@C@Q@;%k#D@#%5#^$c S#/@5@ ",
|
||||
" $ $ <+_$_$o+[+[+Y@p+a#a#l$Z@L@>#(#_#1#'#'#:$!#=$N#3#t#>%u#X#Q#m$@$;$c$6$7$r$n$o$,%Y$Q$`$ %'%$%-%)%$ $ 5@[#!%~%{%C@>$]%p$;@t$5#g.4@^%5@ ",
|
||||
" $ $ Y@Y@Y@Y@p+a#B+B+l$Z@Z@z#`@,#1#1#M#)#<#!#=$N#l#t#m#u#X#4$Y#@$;$c$6$7$e$n$z$G$/%Q$`$R$.%(%=%_%:%$ $ /@3@<%R@=.C@[%C$ /@5@ ",
|
||||
" $ $ $ p+B+B+b#l$Z@Z@>#(#`@`@_#'#'#:#<#<#!#d#3#t#>%m#u#X#m$Y#@$;$c$6$7$e$n$z$o$G$H$Q$}%.%|%=%_%1%2%$ $ $ ]#,.C$|@3%y#C@ r@o# ",
|
||||
" $ $ Z@Z@g$Z@>#>#`@c#_#_#'#:#:#:$!#!#d#d#t#t#V#u#u#X#4%Y#@$;$c$6$7$e$N$z$o$G$H$O$ %.%'%=%-%5%6%7%8%$ $ V+_ R@9%U@3% 4@9@ ",
|
||||
" $ $ >#(#z#`@,#_#1#'#'#s#:#<#!#!#2#N#3#t#>%P#u#X#Q#Y#-$@$;$c$6$7$r$n$z$o$G$Z$`$`$ %.%=%-%_%2%7%0%8%$ $ -+|$a%b%c% c I# ",
|
||||
" $ $ _#_#1#1#'#'#s#:#<#<#!#!#=$d#3#t#t#m#u#X#X#Q#Y#L$;$;$6$[$M$e$n$z$o$G$B$Q$`$ %.%d%=%5%2%7%e%8%f%$ $ r+%%q+B@ m@s@ ",
|
||||
" $ $ M#M#s#:#:#:$<#!#<#!#d#q$3#t#t#m#m#u#X#Q#4%Y#@$;$5$<$6$e$e$i$z$A$Y$H$Q$`$S$.%(%g%5%1%6%e%8%h%i%$ $ j% -+[#,@ R@F@s@ ",
|
||||
" $ $ )#<#<#<#!#!#!#d#N#q$l#l#V#m#W#u#X#Q#4%Y#-$;$;$c$6$7$M$r$z$z$o$G$H$Q$`$ %|%d%=%_%1%6%e%8%k%l%i%m%$ $ ~@3@~# *#%%n% ",
|
||||
" $ $ $ !#2#d#q$d#3#3#t#t#m#P#u#u#X#)$4%Y#Y#@$;$!$X$[$7$M$F$i$z$,%Y$B$Q$`$S$.%$%g%-%5%2%o%p%h%h%i%m%m%$ $ q%9@m@3%r%}#s%c V+n% ",
|
||||
" $ $ d#3#3#3#O#t#V#m#u#u#+$X#)$Q#Y#-$@$b$5$c$6$7$M$e$n$z$o$G$Y$Q$Q$R$t%'%$%=%_%2%u%7%p%8%f%v%m%m%m%$ $ 7@-+V+v s@X+X+ ",
|
||||
" $ $ t#t#>%m#P#u#u#+$X#)$Q#Y#Y#-$b$b$;$c$6$7$h$e$F$z$o$o$G$B$Z$O$ % %.%d%-%-%1%6%7%0%k%f%v%m%m%m%m%$ $ 7@w%F@ ",
|
||||
" $ $ u#u#u#u#u#X#Q#)$m$4%Y#@$@$b$!$c$6$6$h$M$e$n$z$z$A$G$B$Q$`$ %.%.%=%=%5%:%u%x%p%8%l%i%y%m%m%m%m%$ $ ",
|
||||
" $ $ X#X#4$Q#Q#Q#m$Y#@$y$;$;$!$c$6$d$7$7$e$n$N$z$o$G$B$H$z%`$t%.%$%$%g%_%2%6%7%p%k%h%i%i%m%m%m%m%m%m%$ $ ",
|
||||
" $ $ Y#Y#4%Y#Y#-$y$@$;$5$c$X$6$6$7$h$e$n$n$o$o$,%Y$Z$Q$`$`$ %.%(%=%-%)%2%7%x%0%h%h%i%m%m%m%m%m%m%m%m%$ $ ",
|
||||
" $ $ @$b$;$@$;$;$!$c$c$6$6$7$7$e$r$n$N$z$o$,%G$B$B$Q$`$ %t%$%$%g%-%5%2%7%e%8%A%h%v%m%m%m%m%m%m%m%m%m%$ $ ",
|
||||
" $ $ ;$5$!$c$X$c$6$6$7$7$h$e$n$n$z$z$o$,%G$Y$B$Q$z% % %.%$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ m%$ $ ",
|
||||
" $ $ X$6$6$6$[$7$7$h$F$F$n$N$z$o$o$,%B$B$B$Q$`$R$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ 7$7$h$e$e$n$n$i$i$z$z$o$,%G$/%B$Q$Q$`$$ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ n$n$n$n$z$z$z$o$o$,%,%G$B$B$Q$Q$$ $ $ $ $ $ $ ",
|
||||
" $ $ z$z$o$z$o$o$G$G$/%/%B$Z$Q$$ $ $ $ $ $ $ ",
|
||||
" $ $ A$A$G$G$G$/%B$Q$H$O$z%$ $ $ $ $ $ ",
|
||||
" $ $ B$B$B$Z$Q$Q$`$`$$ $ $ $ $ $ ",
|
||||
" $ $ O$`$`$`$`$R$$ $ $ $ $ $ ",
|
||||
" $ $ }% % % %$ $ $ $ $ $ $ ",
|
||||
" $ $ |%$%$ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ ",
|
||||
" j%$ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ $ $ $ $ $ $ $ $ $ $ $ ",
|
||||
" $ $ $ ",
|
||||
" $ $ $ ",
|
||||
" ",
|
||||
" ",
|
||||
" "};
|
Binary file not shown.
Before Width: | Height: | Size: 6.6 KiB |
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 5.4 KiB |
Binary file not shown.
|
@ -1,865 +0,0 @@
|
|||
/* XPM */
|
||||
static char * SliceIco_xpm[] = {
|
||||
"128 128 734 2",
|
||||
" c None",
|
||||
". c #008F00",
|
||||
"+ c #009100",
|
||||
"@ c #008700",
|
||||
"# c #007800",
|
||||
"$ c #007700",
|
||||
"% c #009900",
|
||||
"& c #007B00",
|
||||
"* c #007500",
|
||||
"= c #007400",
|
||||
"- c #007F00",
|
||||
"; c #008D00",
|
||||
"> c #008000",
|
||||
", c #007900",
|
||||
"' c #009F00",
|
||||
") c #009000",
|
||||
"! c #007D00",
|
||||
"~ c #007600",
|
||||
"{ c #008100",
|
||||
"] c #008A00",
|
||||
"^ c #008E00",
|
||||
"/ c #009300",
|
||||
"( c #009E00",
|
||||
"_ c #00B200",
|
||||
": c #00D600",
|
||||
"< c #009400",
|
||||
"[ c #00A100",
|
||||
"} c #008800",
|
||||
"| c #007A00",
|
||||
"1 c #008300",
|
||||
"2 c #00A500",
|
||||
"3 c #00C000",
|
||||
"4 c #00EA00",
|
||||
"5 c #00FF00",
|
||||
"6 c #009D00",
|
||||
"7 c #007C00",
|
||||
"8 c #008900",
|
||||
"9 c #00E700",
|
||||
"0 c #00FD00",
|
||||
"a c #00FE00",
|
||||
"b c #009C00",
|
||||
"c c #00A700",
|
||||
"d c #007300",
|
||||
"e c #00A000",
|
||||
"f c #00C200",
|
||||
"g c #00F400",
|
||||
"h c #00F700",
|
||||
"i c #00FA00",
|
||||
"j c #00A300",
|
||||
"k c #007000",
|
||||
"l c #00C100",
|
||||
"m c #00DF00",
|
||||
"n c #00E900",
|
||||
"o c #00EF00",
|
||||
"p c #008200",
|
||||
"q c #008500",
|
||||
"r c #007100",
|
||||
"s c #007E00",
|
||||
"t c #00AE00",
|
||||
"u c #00CA00",
|
||||
"v c #00D400",
|
||||
"w c #00D700",
|
||||
"x c #00DE00",
|
||||
"y c #00E800",
|
||||
"z c #00F600",
|
||||
"A c #008C00",
|
||||
"B c #008600",
|
||||
"C c #007200",
|
||||
"D c #008400",
|
||||
"E c #00A900",
|
||||
"F c #00BE00",
|
||||
"G c #00C500",
|
||||
"H c #00CC00",
|
||||
"I c #00DA00",
|
||||
"J c #00ED00",
|
||||
"K c #009200",
|
||||
"L c #00AD00",
|
||||
"M c #00B700",
|
||||
"N c #00C600",
|
||||
"O c #00D800",
|
||||
"P c #009800",
|
||||
"Q c #00A800",
|
||||
"R c #00BA00",
|
||||
"S c #00D100",
|
||||
"T c #00F200",
|
||||
"U c #00B500",
|
||||
"V c #00D500",
|
||||
"W c #00FC00",
|
||||
"X c #00EE00",
|
||||
"Y c #00A200",
|
||||
"Z c #00C900",
|
||||
"` c #00EB00",
|
||||
" . c #00F300",
|
||||
".. c #00FB00",
|
||||
"+. c #008B00",
|
||||
"@. c #00E300",
|
||||
"#. c #00F100",
|
||||
"$. c #02FF02",
|
||||
"%. c #03FF03",
|
||||
"&. c #05F805",
|
||||
"*. c #00BF00",
|
||||
"=. c #05FF05",
|
||||
"-. c #01FF01",
|
||||
";. c #000000",
|
||||
">. c #2DEC2D",
|
||||
",. c #2DEC2C",
|
||||
"'. c #2CEB2C",
|
||||
"). c #2BEA2B",
|
||||
"!. c #2AE92A",
|
||||
"~. c #BDBDBD",
|
||||
"{. c #BCBDBD",
|
||||
"]. c #BCBCBC",
|
||||
"^. c #BABBBA",
|
||||
"/. c #FF0000",
|
||||
"(. c #2AE82A",
|
||||
"_. c #29E829",
|
||||
":. c #C1C2C2",
|
||||
"<. c #C1C1C1",
|
||||
"[. c #C0C1C1",
|
||||
"}. c #C0C0C0",
|
||||
"|. c #BFC0C0",
|
||||
"1. c #BFBFBF",
|
||||
"2. c #BEBDBE",
|
||||
"3. c #BCBDBC",
|
||||
"4. c #BBBBBB",
|
||||
"5. c #BABABA",
|
||||
"6. c #2CEA2B",
|
||||
"7. c #C3C3C3",
|
||||
"8. c #C4C3C3",
|
||||
"9. c #C3C3C4",
|
||||
"0. c #C3C4C3",
|
||||
"a. c #C3C2C3",
|
||||
"b. c #C2C1C2",
|
||||
"c. c #C1C1C2",
|
||||
"d. c #BFC0BF",
|
||||
"e. c #BEBEBF",
|
||||
"f. c #BDBDBE",
|
||||
"g. c #BDBCBC",
|
||||
"h. c #BCBBBB",
|
||||
"i. c #BABAB9",
|
||||
"j. c #B9B9B9",
|
||||
"k. c #2BEB2B",
|
||||
"l. c #2BE92B",
|
||||
"m. c #28E728",
|
||||
"n. c #C2C2C3",
|
||||
"o. c #C4C4C4",
|
||||
"p. c #C5C5C5",
|
||||
"q. c #C4C5C5",
|
||||
"r. c #C5C4C4",
|
||||
"s. c #BEBEBE",
|
||||
"t. c #BDBEBE",
|
||||
"u. c #BBBABA",
|
||||
"v. c #B8B8B8",
|
||||
"w. c #29E728",
|
||||
"x. c #C2C2C2",
|
||||
"y. c #C3C3C2",
|
||||
"z. c #C5C6C6",
|
||||
"A. c #C6C6C6",
|
||||
"B. c #C7C6C6",
|
||||
"C. c #C6C6C5",
|
||||
"D. c #C6C5C6",
|
||||
"E. c #C4C5C4",
|
||||
"F. c #C3C4C4",
|
||||
"G. c #C3C2C2",
|
||||
"H. c #C1C0C0",
|
||||
"I. c #C0BFBF",
|
||||
"J. c #BDBCBD",
|
||||
"K. c #BBBCBB",
|
||||
"L. c #B8B8B9",
|
||||
"M. c #B8B8B7",
|
||||
"N. c #28E829",
|
||||
"O. c #27E728",
|
||||
"P. c #C2C2C1",
|
||||
"Q. c #C2C3C2",
|
||||
"R. c #C5C5C4",
|
||||
"S. c #C7C7C7",
|
||||
"T. c #C8C8C7",
|
||||
"U. c #C6C6C7",
|
||||
"V. c #C5C4C5",
|
||||
"W. c #BFBFBE",
|
||||
"X. c #BABBBB",
|
||||
"Y. c #BAB9BA",
|
||||
"Z. c #B8B7B8",
|
||||
"`. c #B7B7B6",
|
||||
" + c #2BEB2C",
|
||||
".+ c #2AEA2A",
|
||||
"++ c #27E627",
|
||||
"@+ c #C1C1C0",
|
||||
"#+ c #C9C8C9",
|
||||
"$+ c #C9C9C9",
|
||||
"%+ c #C9C9C8",
|
||||
"&+ c #C8C9C9",
|
||||
"*+ c #C8C8C8",
|
||||
"=+ c #C7C6C7",
|
||||
"-+ c #B7B7B7",
|
||||
";+ c #B6B5B5",
|
||||
">+ c #2CEA2C",
|
||||
",+ c #C7C7C6",
|
||||
"'+ c #C9CACA",
|
||||
")+ c #CACBCB",
|
||||
"!+ c #CACBCA",
|
||||
"~+ c #CAC9CA",
|
||||
"{+ c #C7C7C8",
|
||||
"]+ c #BCBBBC",
|
||||
"^+ c #BABABB",
|
||||
"/+ c #B9B8B9",
|
||||
"(+ c #B6B6B6",
|
||||
"_+ c #B5B4B5",
|
||||
":+ c #2AE929",
|
||||
"<+ c #C0C0C1",
|
||||
"[+ c #C8C9C8",
|
||||
"}+ c #CACACA",
|
||||
"|+ c #CBCBCB",
|
||||
"1+ c #CCCCCC",
|
||||
"2+ c #C9CAC9",
|
||||
"3+ c #C9C8C8",
|
||||
"4+ c #BFBEBE",
|
||||
"5+ c #B5B5B4",
|
||||
"6+ c #B4B4B3",
|
||||
"7+ c #04F204",
|
||||
"8+ c #CBCACB",
|
||||
"9+ c #CDCECD",
|
||||
"0+ c #CECDCE",
|
||||
"a+ c #CDCDCD",
|
||||
"b+ c #CBCBCC",
|
||||
"c+ c #BBBBBA",
|
||||
"d+ c #B7B6B6",
|
||||
"e+ c #B5B4B4",
|
||||
"f+ c #B3B3B3",
|
||||
"g+ c #B2B2B2",
|
||||
"h+ c #26E526",
|
||||
"i+ c #C6C7C6",
|
||||
"j+ c #CACACB",
|
||||
"k+ c #CFCFCE",
|
||||
"l+ c #C8C7C8",
|
||||
"m+ c #BAB9B9",
|
||||
"n+ c #B7B8B8",
|
||||
"o+ c #B6B6B7",
|
||||
"p+ c #B5B5B5",
|
||||
"q+ c #B3B3B4",
|
||||
"r+ c #B2B2B1",
|
||||
"s+ c #29E929",
|
||||
"t+ c #C4C4C3",
|
||||
"u+ c #C9C9CA",
|
||||
"v+ c #CECECE",
|
||||
"w+ c #CBCCCC",
|
||||
"x+ c #C2C1C1",
|
||||
"y+ c #C0C1C0",
|
||||
"z+ c #BEBEBD",
|
||||
"A+ c #BCBCBB",
|
||||
"B+ c #B7B8B7",
|
||||
"C+ c #B6B7B6",
|
||||
"D+ c #B4B5B4",
|
||||
"E+ c #B0B1B0",
|
||||
"F+ c #28E729",
|
||||
"G+ c #C7C8C8",
|
||||
"H+ c #CACAC9",
|
||||
"I+ c #CBCCCB",
|
||||
"J+ c #BFBEBF",
|
||||
"K+ c #B4B4B4",
|
||||
"L+ c #B3B4B3",
|
||||
"M+ c #B0B0B0",
|
||||
"N+ c #AEAFAF",
|
||||
"O+ c #C5C5C6",
|
||||
"P+ c #CBCACA",
|
||||
"Q+ c #C6C5C5",
|
||||
"R+ c #C2C3C3",
|
||||
"S+ c #BEBFBE",
|
||||
"T+ c #B1B2B1",
|
||||
"U+ c #AFAEAF",
|
||||
"V+ c #ADADAD",
|
||||
"W+ c #2AE829",
|
||||
"X+ c #25E425",
|
||||
"Y+ c #B8B9B8",
|
||||
"Z+ c #B5B6B5",
|
||||
"`+ c #B1B1B1",
|
||||
" @ c #AEAFAE",
|
||||
".@ c #27E526",
|
||||
"+@ c #26E525",
|
||||
"@@ c #C8C7C7",
|
||||
"#@ c #C7C8C7",
|
||||
"$@ c #C5C6C5",
|
||||
"%@ c #C4C4C5",
|
||||
"&@ c #B9BAB9",
|
||||
"*@ c #B6B7B7",
|
||||
"=@ c #B0B0AF",
|
||||
"-@ c #AEAEAE",
|
||||
";@ c #ADADAC",
|
||||
">@ c #ABACAB",
|
||||
",@ c #27E527",
|
||||
"'@ c #26E425",
|
||||
")@ c #B9B9B8",
|
||||
"!@ c #B1B0B1",
|
||||
"~@ c #AFB0AF",
|
||||
"{@ c #ADACAC",
|
||||
"]@ c #ABAAAB",
|
||||
"^@ c #28E627",
|
||||
"/@ c #26E527",
|
||||
"(@ c #C1C0C1",
|
||||
"_@ c #B2B1B2",
|
||||
":@ c #AFAFAF",
|
||||
"<@ c #AEADAE",
|
||||
"[@ c #ACACAC",
|
||||
"}@ c #ABAAAA",
|
||||
"|@ c #AAA9A9",
|
||||
"1@ c #27E727",
|
||||
"2@ c #25E325",
|
||||
"3@ c #B8B9B9",
|
||||
"4@ c #B7B7B8",
|
||||
"5@ c #B3B3B2",
|
||||
"6@ c #ADACAD",
|
||||
"7@ c #AAAAAB",
|
||||
"8@ c #A9A9A9",
|
||||
"9@ c #A7A7A8",
|
||||
"0@ c #24E324",
|
||||
"a@ c #084808",
|
||||
"b@ c #BDBDBC",
|
||||
"c@ c #B5B5B6",
|
||||
"d@ c #ACACAD",
|
||||
"e@ c #ABABAB",
|
||||
"f@ c #A9AAAA",
|
||||
"g@ c #A8A8A8",
|
||||
"h@ c #A7A7A6",
|
||||
"i@ c #C0BFC0",
|
||||
"j@ c #AFB0B0",
|
||||
"k@ c #ABACAC",
|
||||
"l@ c #AAAAAA",
|
||||
"m@ c #A8A7A8",
|
||||
"n@ c #A7A7A7",
|
||||
"o@ c #A5A5A5",
|
||||
"p@ c #BBBABB",
|
||||
"q@ c #B9BABA",
|
||||
"r@ c #ADAEAE",
|
||||
"s@ c #A6A6A6",
|
||||
"t@ c #A4A4A5",
|
||||
"u@ c #BDBEBD",
|
||||
"v@ c #B1B2B2",
|
||||
"w@ c #B0AFB0",
|
||||
"x@ c #AEAEAF",
|
||||
"y@ c #A6A7A6",
|
||||
"z@ c #A5A6A5",
|
||||
"A@ c #A4A4A4",
|
||||
"B@ c #25E526",
|
||||
"C@ c #25E424",
|
||||
"D@ c #23E224",
|
||||
"E@ c #23E223",
|
||||
"F@ c #B4B3B3",
|
||||
"G@ c #AFAFAE",
|
||||
"H@ c #AEADAD",
|
||||
"I@ c #A9A8A8",
|
||||
"J@ c #A7A8A7",
|
||||
"K@ c #A4A5A5",
|
||||
"L@ c #A3A3A3",
|
||||
"M@ c #A2A2A3",
|
||||
"N@ c #25E324",
|
||||
"O@ c #04E804",
|
||||
"P@ c #B9B8B8",
|
||||
"Q@ c #B2B1B1",
|
||||
"R@ c #ACABAB",
|
||||
"S@ c #A5A4A4",
|
||||
"T@ c #A2A3A3",
|
||||
"U@ c #A2A2A1",
|
||||
"V@ c #B9B9BA",
|
||||
"W@ c #B1B0B0",
|
||||
"X@ c #AAAAA9",
|
||||
"Y@ c #A6A6A5",
|
||||
"Z@ c #A5A5A4",
|
||||
"`@ c #A1A1A1",
|
||||
" # c #9FA0A0",
|
||||
".# c #25E525",
|
||||
"+# c #24E424",
|
||||
"@# c #23E324",
|
||||
"## c #23E122",
|
||||
"$# c #B3B2B3",
|
||||
"%# c #A9A9AA",
|
||||
"&# c #A9A9A8",
|
||||
"*# c #A8A7A7",
|
||||
"=# c #A6A7A7",
|
||||
"-# c #A2A2A2",
|
||||
";# c #A1A0A0",
|
||||
"># c #9F9F9F",
|
||||
",# c #22E122",
|
||||
"'# c #B1B1B0",
|
||||
")# c #AFAFB0",
|
||||
"!# c #ABABAA",
|
||||
"~# c #A8A8A7",
|
||||
"{# c #A7A6A6",
|
||||
"]# c #A4A5A4",
|
||||
"^# c #9F9FA0",
|
||||
"/# c #9E9F9E",
|
||||
"(# c #9D9D9D",
|
||||
"_# c #23E123",
|
||||
":# c #B2B2B3",
|
||||
"<# c #A5A6A6",
|
||||
"[# c #A5A4A5",
|
||||
"}# c #A0A09F",
|
||||
"|# c #9F9E9F",
|
||||
"1# c #9C9D9C",
|
||||
"2# c #24E325",
|
||||
"3# c #24E223",
|
||||
"4# c #23E222",
|
||||
"5# c #B2B3B3",
|
||||
"6# c #B1B1B2",
|
||||
"7# c #AEAEAD",
|
||||
"8# c #AAA9AA",
|
||||
"9# c #A8A9A9",
|
||||
"0# c #A4A4A3",
|
||||
"a# c #A3A2A3",
|
||||
"b# c #9D9E9E",
|
||||
"c# c #9C9C9D",
|
||||
"d# c #9C9B9B",
|
||||
"e# c #21E021",
|
||||
"f# c #AFAEAE",
|
||||
"g# c #ABABAC",
|
||||
"h# c #A3A4A4",
|
||||
"i# c #A09F9F",
|
||||
"j# c #9E9E9E",
|
||||
"k# c #9C9C9C",
|
||||
"l# c #9A9B9B",
|
||||
"m# c #99999A",
|
||||
"n# c #23E323",
|
||||
"o# c #21E022",
|
||||
"p# c #ADAEAD",
|
||||
"q# c #ACADAD",
|
||||
"r# c #AAABAA",
|
||||
"s# c #A9A8A9",
|
||||
"t# c #A7A8A8",
|
||||
"u# c #9C9D9D",
|
||||
"v# c #9B9B9B",
|
||||
"w# c #9A999A",
|
||||
"x# c #999898",
|
||||
"y# c #24E224",
|
||||
"z# c #AAABAB",
|
||||
"A# c #A1A2A2",
|
||||
"B# c #A0A1A0",
|
||||
"C# c #9E9E9F",
|
||||
"D# c #9D9E9D",
|
||||
"E# c #9B9C9B",
|
||||
"F# c #9A9B9A",
|
||||
"G# c #999999",
|
||||
"H# c #989898",
|
||||
"I# c #22E222",
|
||||
"J# c #22E021",
|
||||
"K# c #20E020",
|
||||
"L# c #ADADAE",
|
||||
"M# c #ACADAC",
|
||||
"N# c #A8A9A8",
|
||||
"O# c #A2A3A2",
|
||||
"P# c #A2A1A2",
|
||||
"Q# c #A1A1A0",
|
||||
"R# c #A0A0A0",
|
||||
"S# c #9F9E9E",
|
||||
"T# c #9E9E9D",
|
||||
"U# c #9B9B9C",
|
||||
"V# c #9A9A9A",
|
||||
"W# c #979797",
|
||||
"X# c #24E323",
|
||||
"Y# c #20DF20",
|
||||
"Z# c #ACABAC",
|
||||
"`# c #A5A5A6",
|
||||
" $ c #A09FA0",
|
||||
".$ c #9D9C9D",
|
||||
"+$ c #969696",
|
||||
"@$ c #959595",
|
||||
"#$ c #21DF21",
|
||||
"$$ c #A4A3A4",
|
||||
"%$ c #9FA09F",
|
||||
"&$ c #9F9F9E",
|
||||
"*$ c #9C9B9C",
|
||||
"=$ c #969796",
|
||||
"-$ c #959596",
|
||||
";$ c #949494",
|
||||
">$ c #A8A8A9",
|
||||
",$ c #A3A3A2",
|
||||
"'$ c #9E9D9D",
|
||||
")$ c #9B9A9B",
|
||||
"!$ c #999A9A",
|
||||
"~$ c #979798",
|
||||
"{$ c #939393",
|
||||
"]$ c #1FDE1F",
|
||||
"^$ c #A4A3A3",
|
||||
"/$ c #A1A1A2",
|
||||
"($ c #A0A1A1",
|
||||
"_$ c #999998",
|
||||
":$ c #989897",
|
||||
"<$ c #929393",
|
||||
"[$ c #22E022",
|
||||
"}$ c #A6A5A5",
|
||||
"|$ c #A1A2A1",
|
||||
"1$ c #9D9D9E",
|
||||
"2$ c #989797",
|
||||
"3$ c #969695",
|
||||
"4$ c #959495",
|
||||
"5$ c #929293",
|
||||
"6$ c #919291",
|
||||
"7$ c #909190",
|
||||
"8$ c #20DF21",
|
||||
"9$ c #1FDF20",
|
||||
"0$ c #A3A3A4",
|
||||
"a$ c #9E9F9F",
|
||||
"b$ c #999A99",
|
||||
"c$ c #989998",
|
||||
"d$ c #969697",
|
||||
"e$ c #969596",
|
||||
"f$ c #949594",
|
||||
"g$ c #949393",
|
||||
"h$ c #929392",
|
||||
"i$ c #919191",
|
||||
"j$ c #909090",
|
||||
"k$ c #8F8F8F",
|
||||
"l$ c #20E021",
|
||||
"m$ c #A0A0A1",
|
||||
"n$ c #9D9D9C",
|
||||
"o$ c #959594",
|
||||
"p$ c #949394",
|
||||
"q$ c #939292",
|
||||
"r$ c #8F9090",
|
||||
"s$ c #8E8F8E",
|
||||
"t$ c #21E121",
|
||||
"u$ c #1FDD1F",
|
||||
"v$ c #969595",
|
||||
"w$ c #959494",
|
||||
"x$ c #929292",
|
||||
"y$ c #929192",
|
||||
"z$ c #909191",
|
||||
"A$ c #8F8F90",
|
||||
"B$ c #8E8E8E",
|
||||
"C$ c #8D8D8D",
|
||||
"D$ c #20DE1F",
|
||||
"E$ c #1EDD1E",
|
||||
"F$ c #9C9C9B",
|
||||
"G$ c #9B9B9A",
|
||||
"H$ c #929191",
|
||||
"I$ c #8F908F",
|
||||
"J$ c #8E8E8F",
|
||||
"K$ c #8C8C8C",
|
||||
"L$ c #9A9A9B",
|
||||
"M$ c #9A9A99",
|
||||
"N$ c #979898",
|
||||
"O$ c #979697",
|
||||
"P$ c #949595",
|
||||
"Q$ c #929291",
|
||||
"R$ c #908F8F",
|
||||
"S$ c #8E8E8D",
|
||||
"T$ c #8C8D8C",
|
||||
"U$ c #8B8B8B",
|
||||
"V$ c #8A8A8A",
|
||||
"W$ c #1EDE1F",
|
||||
"X$ c #059A05",
|
||||
"Y$ c #9D9C9C",
|
||||
"Z$ c #989798",
|
||||
"`$ c #959696",
|
||||
" % c #939493",
|
||||
".% c #919292",
|
||||
"+% c #8A8B8A",
|
||||
"@% c #898989",
|
||||
"#% c #1FDF1F",
|
||||
"$% c #1DDC1D",
|
||||
"%% c #9B9C9C",
|
||||
"&% c #949493",
|
||||
"*% c #919090",
|
||||
"=% c #8F8F8E",
|
||||
"-% c #8C8C8D",
|
||||
";% c #898988",
|
||||
">% c #1FDE20",
|
||||
",% c #1DDD1E",
|
||||
"'% c #969797",
|
||||
")% c #90908F",
|
||||
"!% c #8D8D8E",
|
||||
"~% c #89898A",
|
||||
"{% c #888888",
|
||||
"]% c #878787",
|
||||
"^% c #1FDD1E",
|
||||
"/% c #1EDD1D",
|
||||
"(% c #017501",
|
||||
"_% c #939494",
|
||||
":% c #8E8D8D",
|
||||
"<% c #8D8C8D",
|
||||
"[% c #868686",
|
||||
"}% c #1CDC1D",
|
||||
"|% c #004C00",
|
||||
"1% c #979796",
|
||||
"2% c #8E8F8F",
|
||||
"3% c #898A8A",
|
||||
"4% c #898889",
|
||||
"5% c #858585",
|
||||
"6% c #1DDC1C",
|
||||
"7% c #1CDB1C",
|
||||
"8% c #959695",
|
||||
"9% c #939293",
|
||||
"0% c #919091",
|
||||
"a% c #8C8B8C",
|
||||
"b% c #8A8989",
|
||||
"c% c #878788",
|
||||
"d% c #848585",
|
||||
"e% c #848484",
|
||||
"f% c #838383",
|
||||
"g% c #1EDC1D",
|
||||
"h% c #8C8B8B",
|
||||
"i% c #898888",
|
||||
"j% c #878887",
|
||||
"k% c #878686",
|
||||
"l% c #858686",
|
||||
"m% c #858484",
|
||||
"n% c #848483",
|
||||
"o% c #828283",
|
||||
"p% c #828282",
|
||||
"q% c #1EDC1E",
|
||||
"r% c #1CDA1C",
|
||||
"s% c #888889",
|
||||
"t% c #868586",
|
||||
"u% c #848485",
|
||||
"v% c #838282",
|
||||
"w% c #808180",
|
||||
"x% c #1CDC1C",
|
||||
"y% c #1BDA1B",
|
||||
"z% c #020A02",
|
||||
"A% c #8E8D8E",
|
||||
"B% c #8D8D8C",
|
||||
"C% c #8C8C8B",
|
||||
"D% c #888788",
|
||||
"E% c #818182",
|
||||
"F% c #818080",
|
||||
"G% c #808080",
|
||||
"H% c #1BDB1B",
|
||||
"I% c #1B901B",
|
||||
"J% c #000600",
|
||||
"K% c #898A89",
|
||||
"L% c #858685",
|
||||
"M% c #858584",
|
||||
"N% c #828383",
|
||||
"O% c #818281",
|
||||
"P% c #7F807F",
|
||||
"Q% c #7F7F7E",
|
||||
"R% c #1BDB1C",
|
||||
"S% c #8D8E8D",
|
||||
"T% c #8B8B8A",
|
||||
"U% c #868786",
|
||||
"V% c #858586",
|
||||
"W% c #818282",
|
||||
"X% c #818181",
|
||||
"Y% c #7F7F7F",
|
||||
"Z% c #7F7E7E",
|
||||
"`% c #7E7D7E",
|
||||
" & c #1DDB1D",
|
||||
".& c #1BDA1C",
|
||||
"+& c #8D8C8C",
|
||||
"@& c #8B8A8A",
|
||||
"#& c #8A8A89",
|
||||
"$& c #878786",
|
||||
"%& c #838382",
|
||||
"&& c #7E7E7E",
|
||||
"*& c #7E7D7D",
|
||||
"=& c #7C7C7D",
|
||||
"-& c #8A8B8B",
|
||||
";& c #888988",
|
||||
">& c #888787",
|
||||
",& c #868685",
|
||||
"'& c #7E7E7F",
|
||||
")& c #7D7E7E",
|
||||
"!& c #7D7D7D",
|
||||
"~& c #7C7C7C",
|
||||
"{& c #7B7B7B",
|
||||
"]& c #1CDB1B",
|
||||
"^& c #878687",
|
||||
"/& c #848384",
|
||||
"(& c #808081",
|
||||
"_& c #7D7D7C",
|
||||
":& c #7C7C7B",
|
||||
"<& c #7A797A",
|
||||
"[& c #257225",
|
||||
"}& c #868787",
|
||||
"|& c #838484",
|
||||
"1& c #828382",
|
||||
"2& c #808181",
|
||||
"3& c #807F7F",
|
||||
"4& c #7E7F7E",
|
||||
"5& c #7D7C7D",
|
||||
"6& c #7A7B7B",
|
||||
"7& c #797A7A",
|
||||
"8& c #797979",
|
||||
"9& c #848383",
|
||||
"0& c #828181",
|
||||
"a& c #818081",
|
||||
"b& c #7C7D7D",
|
||||
"c& c #7B7C7C",
|
||||
"d& c #7A7A7A",
|
||||
"e& c #79797A",
|
||||
"f& c #787878",
|
||||
"g& c #7D7D7E",
|
||||
"h& c #7B7C7B",
|
||||
"i& c #787979",
|
||||
"j& c #828281",
|
||||
"k& c #807F80",
|
||||
"l& c #7B7B7A",
|
||||
"m& c #04FD04",
|
||||
"n& c #818180",
|
||||
"o& c #7E7E7D",
|
||||
"p& c #7D7C7C",
|
||||
"q& c #7D7E7D",
|
||||
"r& c #7F7E7F",
|
||||
"s& c #7C7D7C",
|
||||
"t& c #7C7B7C",
|
||||
"u& c #7B7B7C",
|
||||
"v& c #7C7B7B",
|
||||
"w& c #7B7A7B",
|
||||
"x& c #797978",
|
||||
"y& c #797878",
|
||||
"z& c #021902",
|
||||
"A& c #00BD00",
|
||||
"B& c #00CF00",
|
||||
"C& c #009700",
|
||||
"D& c #00D000",
|
||||
"E& c #00DC00",
|
||||
"F& c #00E500",
|
||||
"G& c #00F500",
|
||||
"H& c #00A400",
|
||||
"I& c #00B400",
|
||||
"J& c #00E400",
|
||||
"K& c #00F900",
|
||||
"L& c #00B100",
|
||||
"M& c #00C400",
|
||||
"N& c #009600",
|
||||
"O& c #00E600",
|
||||
"P& c #00B000",
|
||||
"Q& c #00B800",
|
||||
"R& c #00C300",
|
||||
"S& c #00B300",
|
||||
"T& c #009500",
|
||||
"U& c #00E100",
|
||||
"V& c #00BB00",
|
||||
"W& c #00F800",
|
||||
"X& c #009B00",
|
||||
"Y& c #009A00",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" . + @ # $ # ",
|
||||
" % . & * = = $ - ; > , ",
|
||||
" ' ) ! ~ ~ $ & { ] ^ / ( _ : < ~ ",
|
||||
" [ } , # # # | ! - 1 + 2 3 4 5 5 5 5 5 6 * ",
|
||||
" [ } # , , , , # # 7 8 [ 3 9 0 a a a 5 5 5 5 5 5 b * ",
|
||||
" c ^ 7 | & 7 & $ = d $ @ e f 4 g g h i a 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" j } , ! - - , = k k $ @ e l m 9 n o h 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" 1 7 p q 1 , r k d s / t u v w x y z 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" 8 A B | C r ~ D < E F G H I J 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" K K 1 ~ d C $ { . e L M N O J 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" P . ! * = = # > A P ' Q R S T 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ( A , ~ ~ , 7 { } A + ' U V W 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" e B # # # , & ! s D < E G n a 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ; , , # $ ! A 2 N X 0 0 0 a 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" A 7 Y Z ` T .z ..5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.+.@...5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.. g 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 $.%.&.*.*.*.*.*.*.*.*.*.*.*.=.-.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 $.;.;.;.;.;.;.;.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 -.;.;.;.;.;.;.;.;.;.;.;.;.*.>.,.'.'.'.).).).!.!.*.*.*.*.*.*.$.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 ;.;.;.;.;.;.;.;.;.;.~.{.].^././././.>.'.'.'.'.).).).!.!.(._._.*.*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 ;.;.;.;.;.;.;.;.:.<.[.}.|.1.2.3.4.5././././.>.'.'.'.6.).).!.!.!._._._.*.*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ ;.;.;.;.;.;.7.8.9.0.7.a.b.c.[.d.e.f.g.h.i.j./././.>.'.'.k.).).l.!.!.!._._.m.m.*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.;.;.n.0.o.o.p.p.q.r.o.8.a.b.<.1.s.t.].u.i.v./././.'.'.'.).).).!.!.!._._.w.m.m.*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.;.x.y.o.q.p.z.A.B.A.C.D.E.F.G.:.H.I.s.J.K.5.L.M./././.'.'.).).).!.!.!._._.N.m.m.O.*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.;.}.P.Q.8.R.C.B.S.S.T.S.S.U.C.V.o.x.<.}.W.~.g.X.Y.Z.`./././.'. +).)..+!.!._._._.m.m.O.++*.*.%.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.s.I.@+x.9.o.A.S.T.#+$+$+%+&+*+=+D.R.7.x.<.d.t.{.4.i.j.-+;+/././.>+).)..+!.!._._._.m.m.m.++*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.;.W.}.P.7.o.C.,+*+$+'+)+)+!+~+$+{+,+p.o.n.c.}.s.~.]+^+/+Z.(+_+/././.).).).!.!.:+_._.m.m.m.++++*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.;.<+P.9.E.A.{+[+}+|+1+1+1+)+2+3+S.A.o.y.P.}.4+~.].^.j.v.(+5+6+/././.).).!.!.(._._.m.m.m.++++++*.*.7+5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.x.o.q.B.*+$+8+1+9+0+a+b+}+$+T.A.o.8.x.}.1.t.].c+j.v.d+e+f+g+/././.).!.!.!._._.m.m.m.++++++h+*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.x.0.p.i+*+2+j+1+0+k+a+1+}+$+l+A.p.7.:.H.1.~.].u.m+n+o+p+q+r+/././.).!.!.s+_._.w.m.m.++++++h+*.*.*.5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.t+p.A.*+u+)+1+a+v+a+w+!+#+*+A.p.7.x+y+1.z+A+u.j.B+C+D+q+g+E+/././.!.!.!._._.F+m.m.++++++h+h+*.*.&.5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ;.;.;.V.C.G+[+H+|+1+1+I+|+'+*+S.A.V.7.:.}.J+~.]+5.j.n+(+K+L+g+M+N+/././.!.(._._.m.m.m.++++++h+h+h+*.*.5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.;.;.;.O+S.*+$+}+P+)+j+'+&+G+i+Q+o.R+<.}.S+~.4.u.j.B+(+K+f+T+M+U+V+/./.!.W+_._.m.m.m.++++++h+h+X+*.*.*.5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ ;.;.R.A.=+T.#+$+$+$+[+T.S.Q+r.7.x.H.1.s.{.]+5.Y+-+Z+K+f+`+M+ @V+/././.!._._.m.m.m.++++.@h+h++@X+*.*.5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ ;.;.;.p.A.,+G+G+@@*+#@B.$@%@8.Q.x+}.S+f.].4.&@v.*@;+q+f+`+=@-@;@>@/././._._.m.m.m.++++,@h+h+'@X+*.*.*.5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.;.;.F.p.Q+D.A.U.,+A.p.R.o.y.x+H.d.s.~.]+5.)@M.(+p+f+g+!@~@-@{@]@/././._._.m.m.^@++++/@h+h+X+X+X+*.*.5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.;.;.;.9.o.o.p.p.r.V.o.8.Q.x.(@d.J+~.].^.m+v.`.Z+K+f+_@M+:@<@[@}@|@/././.N.m.m.1@++++h+h+h+X+X+2@*.*.*.5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 ;.;.x.a.7.7.9.8.7.n.x.<.H.|.S+f.].4.5.3@4@C+p+q+5@`+M+-@6@[@7@8@9@/./.m.m.m.++++++h+h+h+X+X+2@0@*.*.5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 a@;.;.<.x.b.x.x.P.b.@+}.1.S+t.b@K.5.j.v.`.c@K+f+g+M+:@-@d@e@f@g@h@/././.m.m.++++++h+h+X+X+X+X+0@*.*.*.5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 ;.;.|.}.@+}.[.<+i@|.W.s.t.3.K.5.m+L.-+(+_+f+5@`+j@-@V+k@l@8@m@n@o@/./.m.m.++++/@h+h+X+X+X+0@0@0@*.*.5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 ;.;.;.1.1.1.1.1.J+s.~.~.].4.p@q@L.-+(+p+K+f+_@E+:@r@[@e@l@g@n@s@t@/././.++++++h+h+h+X+X+X+0@0@0@*.*.*.5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 ;.;.t.s.t.t.u@~.b@].K.4.5.j.v.v.(+;+5+f+v@E+w@x@V+[@}@|@g@y@z@A@/././.++++++h+h+B@X+X+C@0@0@D@E@*.*.5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 ;.;.;.].].g.].A+h.c+5.m+/+v.-+C+Z+K+F@5@`+M+G@H@[@e@l@I@J@s@K@L@M@/./.++++,@h+h++@X+X+N@0@0@E@E@*.*.O@5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 ;.;.4.u.4.p@^.i.i.j.P@-+-+(+p+K+F@g+Q@M+:@r@;@R@7@8@g@n@o@S@T@U@/././.++h+h+h+X+X+X+0@0@0@E@E@E@*.*.5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 ;.;.j.V@j.j.)@Y+v.-+-+o+Z+e+K+f+g+T+W@:@-@V+k@e@X@g@n@Y@Z@L@M@`@ #/./.++h+h+.#X+X++#0@0@@#E@E@##*.*.-.5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 O@;.;.v.B+M.n+-+*@(+;+p+D+6+$#g+`+M+:@-@V+[@e@%#&#*#=#o@L@-#U@;#>#/./.h+h+h+X+X+X+0@0@0@E@E@E@,#*.*.*.5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 ;.;.C+(+(+(+(+c@p+K+L+f+g+T+'#)#:@-@H@d@!#l@&#~#{#Y@]#L@-#`@^#/#(#/./.h+h+X+X+X+0@0@0@E@E@_#,#,#*.*.5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 ;.;.;.p+p+e+K+K+q+f+:#r+`+E+M+N+-@V+[@e@l@8@g@n@<#[#L@-#`@}#|#(#1#/./.h+X+X+X+2#0@0@3#E@E@4#,#,#*.*.&.5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 $.;.;.L+F@q+$#5#g+6#Q@`+M+:@-@7#6@k@e@8#9#m@n@s@]#0#a#`@;#>#b#c#d#/./.X+X+X+N@0@0@0@E@E@E@,#,#,#e#*.*.5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 ;.;.g+v@v@`+`+'#E+w@:@f#7#V+[@g#e@l@&#g@n@s@o@h#L@-#;#i#j#(#k#l#m#/./.X+X+2#0@0@n#E@E@,#,#,#o#e#*.*.-.5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 ;.;.;.!@M+M+j@~@N+f#p#V+q#[@e@r#8#s#t#n@s@o@A@L@U@`@ #/#j#u#v#w#x#/./.X+2#0@0@y#E@E@E@,#,#,#e#e#*.*.*.5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 $.;.;.:@:@f#-@-@p#V+6@[@k@z#8@8@g@m@s@Y@K@h#L@A#B#^#C#D#k#E#F#G#H#/./.X+0@0@0@E@E@E@I#,#,#J#e#e#K#*.*.5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 ;.;.V+L#p#V+M#[@>@e@7@l@X@N#m@n@s@o@t@A@O#P#Q#R#S#T#1#U#V#G#H#W#/././.0@0@X#E@E@E@,#,#,#e#e#e#Y#*.*.$.5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 ;.;.[@[@Z#Z#>@e@z#%#|@8@g@n@{#s@`#S@L@O#-#Q# $C#T#.$k#V#m#x#W#+$@$/./.0@0@E@E@E@,#,#,#o#e#e##$Y#*.*.*.5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 &.;.;.e@7@l@X@8@9#N#t#n@n@s@<#t@$$L@O#`@B#%$&$j#(#*$v#m#x#H#=$-$;$/./.0@E@E@E@_#,#,#,#e#e#e#Y#Y#Y#*.*.5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 ;.;.8@8@8@>$g@9@n@=#s@Y@o@A@0#,$-#`@R#>#&$'$k#*$)$!$x#~$=$@$;${$/./.0@E@E@E@,#,#,#o#e#e#Y#Y#Y#]$*.*.-.5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 ;.;.n@9@n@{#h@y@z@`#]#A@^$L@O#/$($R#>#j#(#u#E#V#G#_$:$=$-$;${$<$/././.E@E@,#,#,#[$e#e#e#Y#Y#Y#]$*.*.*.5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 ;.;.;.s@s@<#}$o@t@A@^$L@-#|$`@R#%$|#j#1$k#d#F#G#G#2$+$3$4${$5$6$7$/./.E@_#,#,#,#e#e#e#8$Y#Y#9$]$]$*.*.5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 %.;.;.A@S@A@0#0$L@L@|$-#`@;# $>#a$(#.$k#v#V#b$c$W#d$e$f$g$h$i$j$k$/./.##,#,#,#e#e#e#l$Y#Y#Y#]$]$]$*.*.-.b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 ;.;.0$a#-#M@-#A#`@m$B#^#>#/#j#n$1#v#)$V#G#x#W#+$3$o$p$q$i$i$r$s$/./.,#,#,#t$e#e#e#Y#Y#Y#]$]$]$u$*.*.*.b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 ;.;.P#P#`@m$`@R# #>#>#j#'$(#k#v#v#F#m#G#H#W#+$v$w${$x$y$z$A$B$C$/./.,#,#[$e#e#e#K#Y#Y#D$]$]$]$E$E$*.*.b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 ;.;.;.R#R#^#%$&$S#j#(#.$u#F$v#G$V#G#H#W#d$3$@$;${$h$H$7$I$J$C$K$/././.,#e#e#e#8$Y#Y#Y#]$]$]$E$E$E$*.*.b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 %.;.;.&$a$j#T#j#(#c#k#E#v#L$M$G#x#N$O$+$-$P$p${$Q$i$j$R$B$S$T$U$V$/./.e#e#e#e#Y#Y#Y#]$]$]$W$E$E$E$*.*.X$* ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 ;.;.'$(#(#Y$F$*$v#F#F#b$G#c$Z$N$+$`$4$f$ %x$.%i$A$k$B$C$K$U$+%@%/./.e#e#l$Y#Y#Y##%]$]$W$E$E$E$$%$%*.= * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 ;.;.%%E#E#v#L$L$V#G#_$_$Z$2$O$+$e$;$&%{$<$Q$*%I$=%B$C$-%U$V$@%;%/./.e#e#Y#Y#Y#>%]$]$]$E$E$E$,%$%$%*.= * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 ;.;.V#V#!$!$G#_$H#H#Z$W#'%3$@$f$&%&%h$y$z$j$)%=%!%C$K$U$V$~%{%]%/./.e#Y#Y#Y#Y#]$]$]$^%E$E$/%$%$%$%*.= (% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 ;.;.;.G#H#H#:$Z$W#W#+$-$@$P$_%{$<$x$H$i$j$k$B$:%<%K$U$V$;%{%]%[%/./.Y#Y#Y#Y#]$]$]$W$E$E$E$$%$%$%}%*.= |% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 $.;.;.W#W#1%'%+$`$@$4$;$;${$x$x$Q$j$j$k$2%:%C$T$U$U$3%4%{%]%[%5%/./.Y#Y#Y#]$]$]$u$E$E$E$$%$%$%6%7%7%= |% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 ;.;.`$-$8%@$o$;$&%{$<$9%x$i$0%j$A$s$B$C$<%a%U$V$b%{%c%]%[%d%e%f%/./.Y#]$]$]$^%E$E$E$g%$%$%$%7%7%7%= |% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 ;.;.;$;$&% %{${$5$x$i$z$j$j$)%k$B$:%C$K$h%V$3%@%i%j%k%l%m%n%o%p%/./.]$]$]$]$E$E$E$q%$%$%$%7%7%7%r%= |% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 ;.;.h$h$5$x$x$Q$i$0%7$j$k$J$B$C$C$K$K$U$V$b%s%{%]%[%t%u%e%v%p%w%/./.]$]$]$E$E$E$/%$%$%$%x%7%7%7%y%= |%z% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 ;.;.y$H$i$i$j$j$r$k$=%J$A%!%B%K$C%U$V$b%4%{%D%[%[%5%e%f%o%E%F%G%/./.]$]$E$E$E$q%$%$%$%x%7%7%7%H%y%I%|%J% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 ;.;.;.r$A$R$J$k$B$B$:%C$K$a%U$U$V$K%4%{%{%]%[%L%M%n%N%o%O%w%P%Q%/./.W$E$E$E$,%$%$%$%$%7%7%7%R%y%y%I%|%J% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 $.;.;.2%B$B$B$S%C$B%K$h%U$T%V$K%@%i%c%]%U%V%5%e%f%o%W%X%G%Y%Z%`%/./.E$E$E$E$$%$%$% &7%7%7%.&y%y%y%I%|%J% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.C$C$-%+&a%h%U$+%@&#&@%i%i%D%$&$&[%5%m%f%%&p%O%F%Y%Y%&&*&=&/./.E$E$q%$%$%$%6%7%7%7%.&y%y%y%y%I%|%J% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.h%h%U$U$-&V$@%#&;&s%{%>&]%U%,&5%e%e%%&o%p%X%G%P%'&)&!&~&{&/./.E$$%$%$%$% &7%7%7%]&y%y%y%y%y%I%|%J% ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.V$3%~%@%@%@%;&{%]%^&[%[%L%5%e%/&f%N%W%X%(&G%Y%&&!&_&:&{&<&/./.,%$%$%$%x%7%7%7%R%y%y%y%y%y%y%I%[&J%;. ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.{%{%s%{%{%c%^&}&[%V%5%M%e%|&f%1&p%X%2&3&Y%4&`%5&~&{&6&7&8&/./.$%$%$%7%7%7%7%R%y%y%y%y%y%y%y%I%[&J%;. ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.]%$&k%}&[%[%L%5%5%e%|&9&f%p%E%0&a&G%Y%Q%&&!&b&c&{&d&e&f&f&/./.$%$%7%7%7%7%R%y%y%y%y%y%y%y%y%I%[&J%;. ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.[%t%L%5%M%d%e%|&f%f%1&p%X%X%G%G%Y%Q%&&g&!&~&h&d&7&i&;.;.;.;.;.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.= [&J%;. ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.M%e%|&|&n%f%f%%&j&O%X%a&G%k&Y%Q%*&*&b&~&{&l&;.;.;.;.;.;.;.;.;.*.*.*.*.*.7+m&O@*.*.*.*.*.*.*.= |%J%;. ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.f%f%1&p%p%X%X%n&n&G%G%Y%4&&&o&!&p&~&{&;.;.;.;.;.;.;.;.$.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 -.X$|%J%;. ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.X%X%X%2&G%G%G%k&Y%4&Q%)&!&!&~&~&;.;.;.;.;.;.;.$.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.G%G%k&P%Y%Y%Z%&&o&q&!&=&~&;.;.;.;.;.;.;.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.r&r&&&&&&&o&!&~&s&t&:&;.;.;.;.;.;.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.!&b&!&5&~&~&{&{&;.;.;.;.;.;.-.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.u&v&{&{&{&l&;.;.;.;.;.;.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.w&d&d&7&;.;.;.;.;.%.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.x&y&;.;.;.;.;.-.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.;.;.;.;.;.-.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.;.;.;.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 ;.;.;.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 z&;.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.^ #.5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.) h 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" A D A&B&x T a 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" ; ~ r ! C&U D&O E&9 z 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" | > s # d k d > 6 f F&n J G&0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" H&} , | & & # * d 7 ) I&J&z h K&0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" e D # , , , , # s + L&E&5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" c K & # # , 7 > 1 A Y M&o 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" N&s $ * $ & 1 A K 6 U w 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" P ; & = = $ { . ' j t M&O&0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" . ) > * C r # @ 6 P&Q&R&I g 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" } } s d k d s P S&Z D&x .5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" +.& > D { ~ r r s T&M v E&U&` i 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" 6 7 & - s # C k $ } 2 H 4 ` o z 0 5 5 5 5 5 5 5 5 5 5 b * ",
|
||||
" H&@ # & & | $ * = - T&V&O&h W&i W 5 5 5 5 5 5 b * ",
|
||||
" X&s , , , , , | 7 } j Z G&5 5 5 5 5 b * ",
|
||||
" H&) & $ $ $ & > 1 8 Y&R F&5 ( * ",
|
||||
" 6 } $ ~ * # p +.C&p , ",
|
||||
" C&+ 7 = d ~ , ",
|
||||
" ; ^ 1 ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "};
|
|
@ -1,41 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
class SurfWorkbench ( Workbench ):
|
||||
""" @brief Workbench of Ship design module. Here toolbars & icons are append. """
|
||||
from surfUtils import Paths, Translator
|
||||
import SurfGui
|
||||
|
||||
Icon = Paths.iconsPath() + "/Ico.png"
|
||||
MenuText = str(Translator.translate("Surface tools"))
|
||||
ToolTip = str(Translator.translate("Surface tools"))
|
||||
|
||||
def Initialize(self):
|
||||
# ToolBar
|
||||
list = ["Surf_IsoCurve", "Surf_SliceCurve", "Surf_Border", "Surf_Convert"]
|
||||
self.appendToolbar("Surface tools",list)
|
||||
|
||||
# Menu
|
||||
list = ["Surf_IsoCurve", "Surf_SliceCurve", "Surf_Border", "Surf_Convert"]
|
||||
self.appendMenu("Surface tools",list)
|
||||
Gui.addWorkbench(SurfWorkbench())
|
|
@ -1,52 +0,0 @@
|
|||
# Change data dir from default ($(prefix)/share) to actual dir
|
||||
datadir = $(prefix)/Mod/Surfaces
|
||||
|
||||
data_DATA = InitGui.py \
|
||||
SurfGui.py
|
||||
|
||||
nobase_data_DATA = \
|
||||
Icons/BorderIco.png \
|
||||
Icons/BorderIco.xcf \
|
||||
Icons/BorderIco.xpm \
|
||||
Icons/ConvertIco.png \
|
||||
Icons/ConvertIco.xcf \
|
||||
Icons/ConvertTo4SidesIco.xpm \
|
||||
Icons/Ico.png \
|
||||
Icons/Ico.xcf \
|
||||
Icons/Ico.xpm \
|
||||
Icons/IsoCurveIco.png \
|
||||
Icons/IsoCurveIco.xcf \
|
||||
Icons/IsoCurveIco.xpm \
|
||||
Icons/SliceIco.png \
|
||||
Icons/SliceIco.xcf \
|
||||
Icons/SliceIco.xpm \
|
||||
surfBorder/__init__.py \
|
||||
surfConvert/__init__.py \
|
||||
surfConvert/Preview.py \
|
||||
surfConvert/TaskPanel.py \
|
||||
surfConvert/TaskPanel.ui \
|
||||
surfISOCurve/__init__.py \
|
||||
surfISOCurve/PointTracker.py \
|
||||
surfISOCurve/Preview.py \
|
||||
surfISOCurve/TaskPanel.py \
|
||||
surfISOCurve/TaskPanel.ui \
|
||||
surfSlice/__init__.py \
|
||||
surfSlice/PointTracker.py \
|
||||
surfSlice/Preview.py \
|
||||
surfSlice/TaskPanel.py \
|
||||
surfSlice/TaskPanel.ui \
|
||||
surfUtils/Geometry.py \
|
||||
surfUtils/__init__.py \
|
||||
surfUtils/Math.py \
|
||||
surfUtils/Paths.py \
|
||||
surfUtils/Translator.py
|
||||
|
||||
CLEANFILES = $(BUILT_SOURCES)
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(data_DATA) \
|
||||
$(nobase_data_DATA) \
|
||||
CMakeLists.txt \
|
||||
README \
|
||||
surfaces.dox
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
* Authors
|
||||
---------
|
||||
|
||||
Jose Luis Cercós Pita <jlcercos@gmail.com>
|
||||
Alicia Lapique <a.lapique@alumnos.upm.es>
|
||||
|
||||
* Introduction
|
||||
--------------
|
||||
|
||||
Surfaces is a module to work with surfaces, providing GUI for tools implemented at python API, and more complex tools.
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
from PyQt4 import QtCore, QtGui
|
||||
import FreeCAD, FreeCADGui, os
|
||||
|
||||
class IsoCurve:
|
||||
def Activated(self):
|
||||
import surfISOCurve
|
||||
surfISOCurve.load()
|
||||
|
||||
def GetResources(self):
|
||||
from surfUtils import Paths, Translator
|
||||
IconPath = Paths.iconsPath() + "/IsoCurveIco.png"
|
||||
MenuText = str(Translator.translate('Get ISO curve'))
|
||||
ToolTip = str(Translator.translate('Get ISO curve from surface'))
|
||||
return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
|
||||
|
||||
class SliceCurve:
|
||||
def Activated(self):
|
||||
import surfSlice
|
||||
surfSlice.load()
|
||||
|
||||
def GetResources(self):
|
||||
from surfUtils import Paths, Translator
|
||||
IconPath = Paths.iconsPath() + "/SliceIco.png"
|
||||
MenuText = str(Translator.translate('Get surface slice'))
|
||||
ToolTip = str(Translator.translate('Get surface intersection with coordinates planes'))
|
||||
return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
|
||||
|
||||
class Border:
|
||||
def Activated(self):
|
||||
import surfBorder
|
||||
surfBorder.load()
|
||||
|
||||
def GetResources(self):
|
||||
from surfUtils import Paths, Translator
|
||||
IconPath = Paths.iconsPath() + "/BorderIco.png"
|
||||
MenuText = str(Translator.translate('Get border'))
|
||||
ToolTip = str(Translator.translate('Get edges from objects'))
|
||||
return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
|
||||
|
||||
class Convert:
|
||||
def Activated(self):
|
||||
import surfConvert
|
||||
surfConvert.load()
|
||||
|
||||
def GetResources(self):
|
||||
from surfUtils import Paths, Translator
|
||||
IconPath = Paths.iconsPath() + "/ConvertIco.png"
|
||||
MenuText = str(Translator.translate('Convert to 4 sides surface'))
|
||||
ToolTip = str(Translator.translate('Convert a surface (or couple of them) into 4 sides surface'))
|
||||
return {'Pixmap' : IconPath, 'MenuText': MenuText, 'ToolTip': ToolTip}
|
||||
|
||||
FreeCADGui.addCommand('Surf_IsoCurve', IsoCurve())
|
||||
FreeCADGui.addCommand('Surf_SliceCurve', SliceCurve())
|
||||
FreeCADGui.addCommand('Surf_Border', Border())
|
||||
FreeCADGui.addCommand('Surf_Convert', Convert())
|
|
@ -1,51 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
from FreeCAD import Base
|
||||
from FreeCAD import Part
|
||||
|
||||
# Qt libraries
|
||||
from PyQt4 import QtGui,QtCore
|
||||
|
||||
# Main object
|
||||
from surfUtils import Geometry, Translator
|
||||
|
||||
def load():
|
||||
""" Loads the tool. Getting the border don't require any
|
||||
option, so can be executed directly without any task panel. """
|
||||
edges = Geometry.getBorders()
|
||||
if not edges:
|
||||
wrn = Translator.translate("Can't get any edge from selected objects")
|
||||
FreeCAD.Console.PrintWarning(wrn)
|
||||
return
|
||||
obj = edges[0]
|
||||
for i in range(0,len(edges)):
|
||||
obj = obj.oldFuse(edges[i])
|
||||
Part.show(obj)
|
||||
objs = FreeCAD.ActiveDocument.Objects
|
||||
obj = objs[len(objs)-1]
|
||||
obj.Label = 'Border'
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD,FreeCADGui
|
||||
from FreeCAD import Base
|
||||
from FreeCAD import Part
|
||||
# FreeCADShip modules
|
||||
from surfUtils import Paths
|
||||
from surfUtils import Geometry
|
||||
from surfUtils import Math
|
||||
|
||||
class Preview(object):
|
||||
def __init__(self,U,V):
|
||||
""" Constructor.
|
||||
@param U Part::topoShape object that contains the U direction edge.
|
||||
@param V Part::topoShape object that contains the V direction edge.
|
||||
"""
|
||||
self.objU = None
|
||||
self.objV = None
|
||||
self.U = U
|
||||
self.V = V
|
||||
self.buildObjs()
|
||||
self.setProperties()
|
||||
|
||||
def buildObjs(self):
|
||||
""" Builds objects to show.
|
||||
"""
|
||||
Part.show(self.U)
|
||||
objs = FreeCAD.ActiveDocument.Objects
|
||||
self.objU = objs[len(objs)-1]
|
||||
Part.show(self.V)
|
||||
objs = FreeCAD.ActiveDocument.Objects
|
||||
self.objV = objs[len(objs)-1]
|
||||
|
||||
def setProperties(self):
|
||||
""" Set colour of lines and width.
|
||||
"""
|
||||
self.objU.Label = 'U direction'
|
||||
self.objV.Label = 'V direction'
|
||||
# Get GUI objects instance
|
||||
objU = FreeCADGui.ActiveDocument.getObject(self.objU.Name)
|
||||
objV = FreeCADGui.ActiveDocument.getObject(self.objV.Name)
|
||||
objU.LineColor = (0.0,0.0,1.0)
|
||||
objU.LineWidth = 5.00
|
||||
objV.LineColor = (1.0,0.0,0.0)
|
||||
objV.LineWidth = 5.00
|
||||
|
||||
def clean(self,Destroy=True):
|
||||
""" Erase all sections from screen.
|
||||
@param self Auto call object.
|
||||
@param Destroy True if the object must be destroyed, False otherwise.
|
||||
"""
|
||||
if (not self.objU) or (not self.objV):
|
||||
return
|
||||
FreeCADGui.ActiveDocument.hide(self.objU.Name)
|
||||
FreeCADGui.ActiveDocument.hide(self.objV.Name)
|
||||
if Destroy:
|
||||
FreeCAD.ActiveDocument.removeObject(self.objU.Name)
|
||||
FreeCAD.ActiveDocument.removeObject(self.objV.Name)
|
||||
self.objU=None
|
||||
self.objV=None
|
|
@ -1,637 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# Standart libraries
|
||||
import math
|
||||
# Import FreeCAD modules
|
||||
import FreeCAD as App
|
||||
import FreeCADGui as Gui
|
||||
# Import Qt libraries
|
||||
from PyQt4 import QtGui,QtCore
|
||||
# Import surface module utils
|
||||
from surfUtils import Paths, Geometry, Math, Translator
|
||||
# Import tool utils
|
||||
import Preview
|
||||
|
||||
class TaskPanel:
|
||||
def __init__(self):
|
||||
""" Class constructor, that loads the user interface and set
|
||||
minimum data as empty values.
|
||||
"""
|
||||
self.ui = Paths.modulePath() + "/surfConvert/TaskPanel.ui"
|
||||
self.objs = []
|
||||
self.edges = []
|
||||
self.faces = []
|
||||
self.surf = None
|
||||
self.preview = None
|
||||
|
||||
def accept(self):
|
||||
""" Method called when accept button is clicked.
|
||||
@return True if all gone right, False otherwise.
|
||||
"""
|
||||
if not self.surf:
|
||||
return False
|
||||
App.Part.show(self.surf.toShape())
|
||||
objs = App.ActiveDocument.Objects
|
||||
obj = objs[len(objs)-1]
|
||||
obj.Label = 'Surface'
|
||||
self.preview.clean()
|
||||
return True
|
||||
|
||||
def reject(self):
|
||||
""" Method called when cancel button is clicked.
|
||||
@return True if all gone right, False otherwise.
|
||||
"""
|
||||
if self.preview :
|
||||
self.preview.clean()
|
||||
return True
|
||||
|
||||
def clicked(self, index):
|
||||
pass
|
||||
|
||||
def open(self):
|
||||
pass
|
||||
|
||||
def needsFullSpace(self):
|
||||
return True
|
||||
|
||||
def isAllowedAlterSelection(self):
|
||||
return False
|
||||
|
||||
def isAllowedAlterView(self):
|
||||
return True
|
||||
|
||||
def isAllowedAlterDocument(self):
|
||||
return False
|
||||
|
||||
def helpRequested(self):
|
||||
pass
|
||||
|
||||
def setupUi(self):
|
||||
""" Setups the user interface taking and storing all controls.
|
||||
"""
|
||||
mw = self.getMainWindow()
|
||||
form = mw.findChild(QtGui.QWidget, "TaskPanel")
|
||||
form.nU = form.findChild(QtGui.QSpinBox, "nU")
|
||||
form.nV = form.findChild(QtGui.QSpinBox, "nV")
|
||||
form.deg = form.findChild(QtGui.QSpinBox, "deg")
|
||||
self.form = form
|
||||
# Initial values
|
||||
if self.initValues():
|
||||
return True
|
||||
self.retranslateUi()
|
||||
# Connect Signals and Slots
|
||||
QtCore.QObject.connect(form.nU, QtCore.SIGNAL("valueChanged(int)"), self.onNUV)
|
||||
QtCore.QObject.connect(form.nV, QtCore.SIGNAL("valueChanged(int)"), self.onNUV)
|
||||
QtCore.QObject.connect(form.deg, QtCore.SIGNAL("valueChanged(int)"), self.onNUV)
|
||||
return False
|
||||
|
||||
def getMainWindow(self):
|
||||
""" returns the main window """
|
||||
# using QtGui.qApp.activeWindow() isn't very reliable because if another
|
||||
# widget than the mainwindow is active (e.g. a dialog) the wrong widget is
|
||||
# returned
|
||||
toplevel = QtGui.qApp.topLevelWidgets()
|
||||
for i in toplevel:
|
||||
if i.metaObject().className() == "Gui::MainWindow":
|
||||
return i
|
||||
raise Exception("No main window found")
|
||||
|
||||
def initValues(self):
|
||||
""" Setup initial values. """
|
||||
# Objects to work
|
||||
self.objs = Gui.Selection.getSelection()
|
||||
if not self.objs:
|
||||
msg = Translator.translate("4 connected edges and at least 1 surface must be selected (Any object has been selected)")
|
||||
App.Console.PrintError(msg)
|
||||
return True
|
||||
if len(self.objs) < 5:
|
||||
msg = Translator.translate("4 connected edges and at least 1 surface must be selected (Less than 5 objects selected)")
|
||||
App.Console.PrintError(msg)
|
||||
return True
|
||||
# Separate edge objects and face objects to work with them separately.
|
||||
if self.getEdgesFaces():
|
||||
return True
|
||||
# Ensure that closed edges given
|
||||
if not self.isClosed():
|
||||
return True
|
||||
# Sort edges (as connect chain)
|
||||
if self.sortEdges():
|
||||
return True
|
||||
# First surface draft
|
||||
if self.getPoints():
|
||||
return True
|
||||
if self.createSurface():
|
||||
return True
|
||||
# On screen data
|
||||
self.preview = Preview.Preview(self.edges[0],self.edges[1])
|
||||
msg = Translator.translate("Ready to work\n")
|
||||
App.Console.PrintMessage(msg)
|
||||
return False
|
||||
|
||||
def retranslateUi(self):
|
||||
""" Set user interface locale strings.
|
||||
"""
|
||||
self.form.setWindowTitle(Translator.translate("Convert to 4 side surface"))
|
||||
nUString = Translator.translate("Points at U")
|
||||
self.form.findChild(QtGui.QLabel, "nULabel").setText("<font color=#0000ff>" + nUString + "</font>")
|
||||
nVString = Translator.translate("Points at V2")
|
||||
self.form.findChild(QtGui.QLabel, "nVLabel").setText("<font color=#ff0000>" + nVString + "</font>")
|
||||
self.form.findChild(QtGui.QLabel, "degLabel").setText(Translator.translate("Surface degree"))
|
||||
|
||||
def onNUV(self, value):
|
||||
""" Answer to nU points or nV points modification events.
|
||||
@param value Changed value.
|
||||
"""
|
||||
if self.getPoints():
|
||||
return
|
||||
if self.createSurface():
|
||||
return
|
||||
self.form.deg.setMaximum(self.surf.MaxDegree)
|
||||
|
||||
def getEdgesFaces(self):
|
||||
""" Returns two arrays filled with the edges and faces selected.
|
||||
@return True if error happens. False otherwise
|
||||
"""
|
||||
self.edges = []
|
||||
self.faces = []
|
||||
for i in range(0,len(self.objs)):
|
||||
objFaces = Geometry.getFaces(self.objs[i])
|
||||
if not objFaces:
|
||||
objEdges = Geometry.getEdges([self.objs[i]])
|
||||
if not objEdges:
|
||||
msg = Translator.translate("4 connected edges and at least 1 surface must be selected (Any edge found)")
|
||||
App.Console.PrintError(msg)
|
||||
return True
|
||||
for j in range(0, len(objEdges)):
|
||||
self.edges.append(objEdges[j])
|
||||
else:
|
||||
for j in range(0, len(objFaces)):
|
||||
self.faces.append(objFaces[j])
|
||||
if len(self.edges) != 4:
|
||||
msg = Translator.translate("4 connected edges and at least 1 surface must be selected (More/less edges not allowed)")
|
||||
App.Console.PrintError(msg)
|
||||
return True
|
||||
return False
|
||||
|
||||
def isClosed(self):
|
||||
""" Returns if the edges objects are a closed curve.
|
||||
@return True if a closed curve can be built with edge objects.
|
||||
False otherwise
|
||||
"""
|
||||
edges = self.edges
|
||||
for i in range(0,len(edges)):
|
||||
edge = edges[i]
|
||||
vertex1 = edge.Vertexes
|
||||
count = [0,0]
|
||||
for j in range(0,len(edges)):
|
||||
if j== i:
|
||||
continue
|
||||
vertex2 = edges[j].Vertexes
|
||||
for k in range(0,2):
|
||||
if Math.isSameVertex(vertex1[0],vertex2[k]):
|
||||
count[0] = count[0]+1
|
||||
if Math.isSameVertex(vertex1[1],vertex2[k]):
|
||||
count[1] = count[1]+1
|
||||
if count != [1,1]:
|
||||
msg = Translator.translate("4 Edges curve must be closed")
|
||||
App.Console.PrintError(msg)
|
||||
return False
|
||||
return True
|
||||
|
||||
def sortEdges(self):
|
||||
""" Sort the edges by their connection points. Also gives if
|
||||
an edge is ill oriented (thir connection point is the end
|
||||
point, not the starting point), with True when is good oriented,
|
||||
and False otherwise.
|
||||
@return True if error happens. False otherwise
|
||||
"""
|
||||
edges = self.edges
|
||||
self.edges = [edges[0]]
|
||||
self.direction = [True]
|
||||
Vertex = self.edges[0].Vertexes[1]
|
||||
for i in range(0,len(edges)-1):
|
||||
for j in range(0,len(edges)):
|
||||
if self.edges[i] == edges[j]:
|
||||
continue
|
||||
Vertexes = edges[j].Vertexes
|
||||
if Math.isSameVertex(Vertex,Vertexes[0]):
|
||||
Vertex = Vertexes[1]
|
||||
self.edges.append(edges[j])
|
||||
self.direction.append(True)
|
||||
break
|
||||
if Math.isSameVertex(Vertex,Vertexes[1]):
|
||||
Vertex = Vertexes[0]
|
||||
self.edges.append(edges[j])
|
||||
self.direction.append(False)
|
||||
break
|
||||
return False
|
||||
|
||||
def getPoints(self):
|
||||
""" Get points that will make the surface.
|
||||
@return True if error happens. False otherwise.
|
||||
"""
|
||||
# Discretize the edges using nU,nV
|
||||
if self.divideEdges():
|
||||
return True
|
||||
if self.samplePoints():
|
||||
return True
|
||||
if self.getSurfacePoints():
|
||||
return True
|
||||
while self.redistributePointsU():
|
||||
continue
|
||||
while self.redistributePointsV():
|
||||
continue
|
||||
return False
|
||||
|
||||
|
||||
def divideEdges(self):
|
||||
""" Get points along the edges. This method only divide the
|
||||
edges into nU/nV parametrically equidistant points.
|
||||
@return True if error happens. False otherwise.
|
||||
"""
|
||||
# Get curves from edges
|
||||
curves=[]
|
||||
for i in range(0,len(self.edges)):
|
||||
curves.append(self.edges[i].Curve)
|
||||
# Get number of divisions at U,V
|
||||
nU = self.form.nU.value()
|
||||
nV = self.form.nV.value()
|
||||
# Get points at U direction (length parameter will used)
|
||||
vertexes = self.edges[0].Vertexes
|
||||
u = curves[0].parameter(App.Base.Vector(vertexes[0].X, vertexes[0].Y, vertexes[0].Z))
|
||||
uEnd = curves[0].parameter(App.Base.Vector(vertexes[1].X, vertexes[1].Y, vertexes[1].Z))
|
||||
du = (uEnd - u) / (nU-1.0)
|
||||
Points0=[]
|
||||
for i in range(0, nU):
|
||||
knots = curves[0].KnotSequence
|
||||
point0 = curves[0].value(u)
|
||||
Points0.append(point0)
|
||||
u = u + du
|
||||
vertexes = self.edges[2].Vertexes
|
||||
u = curves[2].parameter(App.Base.Vector(vertexes[1].X, vertexes[1].Y, vertexes[1].Z))
|
||||
uEnd = curves[2].parameter(App.Base.Vector(vertexes[0].X, vertexes[0].Y, vertexes[0].Z))
|
||||
du = (uEnd - u) / (nU-1.0)
|
||||
Points2=[]
|
||||
for i in range(0, nU):
|
||||
knots = curves[2].KnotSequence
|
||||
point2 = curves[2].value(u)
|
||||
Points2.append(point2)
|
||||
u = u + du
|
||||
# Get points at V direction (length parameter will used)
|
||||
vertexes = self.edges[1].Vertexes
|
||||
v = curves[1].parameter(App.Base.Vector(vertexes[0].X, vertexes[0].Y, vertexes[0].Z))
|
||||
vEnd = curves[1].parameter(App.Base.Vector(vertexes[1].X, vertexes[1].Y, vertexes[1].Z))
|
||||
dv = (vEnd - v) / (nV-1.0)
|
||||
Points1=[]
|
||||
for i in range(0, nV):
|
||||
knots = curves[1].KnotSequence
|
||||
point1 = curves[1].value(v)
|
||||
Points1.append(point1)
|
||||
v = v + dv
|
||||
vertexes = self.edges[3].Vertexes
|
||||
v = curves[3].parameter(App.Base.Vector(vertexes[1].X, vertexes[1].Y, vertexes[1].Z))
|
||||
vEnd = curves[3].parameter(App.Base.Vector(vertexes[0].X, vertexes[0].Y, vertexes[0].Z))
|
||||
dv = (vEnd - v) / (nV-1.0)
|
||||
Points3=[]
|
||||
for i in range(0, nV):
|
||||
knots = curves[3].KnotSequence
|
||||
point3 = curves[3].value(v)
|
||||
Points3.append(point3)
|
||||
v = v + dv
|
||||
# Store points arrays
|
||||
self.EdgePoints=[Points0,Points1,Points2,Points3]
|
||||
# Ensure that is good oriented
|
||||
for i in range(0,4):
|
||||
if not self.direction[i]:
|
||||
self.EdgePoints[i].reverse()
|
||||
return False
|
||||
|
||||
def samplePoints(self):
|
||||
""" Builds a set of points between the edges points. The points
|
||||
are a smooth interpolation between edges points in order to
|
||||
project it over the surface.
|
||||
@return True if error happens. False otherwise.
|
||||
"""
|
||||
# We will advance in V direction, getting point columns, so two
|
||||
# points columns are knowed from U starting and end curves
|
||||
startU = self.EdgePoints[0]
|
||||
endU = self.EdgePoints[2]
|
||||
endV = self.EdgePoints[1]
|
||||
startV = self.EdgePoints[3]
|
||||
self.sample = [startU]
|
||||
# Take two guides from the starting and end U curves. All
|
||||
# sample points will be interpolated with this guides
|
||||
Guide0 = startU[len(startU)-1] - startU[0]
|
||||
Length0 = Guide0.Length
|
||||
Guide0.normalize()
|
||||
Guide1 = endU[len(endU)-1] - endU[0]
|
||||
Length1 = Guide1.Length
|
||||
Guide1.normalize()
|
||||
# Loop over columns
|
||||
for i in range(1,len(startV)-1):
|
||||
# Get the guide
|
||||
Guide = endV[i] - startV[i]
|
||||
Length = Guide.Length
|
||||
Guide.normalize()
|
||||
# Loop over points of the column
|
||||
points = []
|
||||
points.append(startV[i])
|
||||
for j in range(1,len(startU)-1):
|
||||
# Get deviation at starting U
|
||||
v0 = (startU[j] - startU[0]).multiply(1.0 / Length0) - Guide0
|
||||
# Get deviation at ending U
|
||||
v1 = (endU[j] - endU[0]).multiply(1.0 / Length1) - Guide1
|
||||
# Get factor
|
||||
factor = float(i) / len(startV)
|
||||
# Interpolate
|
||||
v = (v0.multiply(1.0-factor) + v1.multiply(factor) + Guide).multiply(Length)
|
||||
points.append(startV[i]+v)
|
||||
points.append(endV[i])
|
||||
self.sample.append(points)
|
||||
# Append last points column (end U curve)
|
||||
self.sample.append(endU)
|
||||
return False
|
||||
|
||||
def getSurfacePoints(self):
|
||||
""" Get the points of the surface. Here sample points will be
|
||||
projected into the surface, getting another surface with nU,nV
|
||||
knots.
|
||||
@todo Support trimmed surfaces.
|
||||
@return True if error happens. False otherwise.
|
||||
"""
|
||||
surf = self.faces[0].Surface
|
||||
self.uv=[]
|
||||
self.points=[]
|
||||
self.surfacesID=[]
|
||||
for j in range(0,len(self.sample)):
|
||||
points=[]
|
||||
uv=[]
|
||||
surfacesID=[]
|
||||
for k in range(0,len(self.sample[j])):
|
||||
UV = surf.parameter(self.sample[j][k])
|
||||
umax = surf.UKnotSequence[len(surf.UKnotSequence)-1]
|
||||
umin = surf.UKnotSequence[0]
|
||||
vmax = surf.VKnotSequence[len(surf.VKnotSequence)-1]
|
||||
vmin = surf.VKnotSequence[0]
|
||||
uv.append([UV[0],UV[1]])
|
||||
uv[k][0] = max(min(uv[k][0],umax), umin)
|
||||
uv[k][1] = max(min(uv[k][1],vmax), vmin)
|
||||
point = surf.value(uv[k][0], uv[k][1])
|
||||
points.append(point)
|
||||
surfacesID.append(0)
|
||||
self.uv.append(uv)
|
||||
self.points.append(points)
|
||||
self.surfacesID.append(surfacesID)
|
||||
|
||||
for i in range(1,len(self.faces)):
|
||||
surf = self.faces[i].Surface
|
||||
for j in range(0,len(self.sample)):
|
||||
for k in range(0,len(self.sample[j])):
|
||||
UV = surf.parameter(self.sample[j][k])
|
||||
uv = [UV[0],UV[1]]
|
||||
UV = uv[:]
|
||||
umax = surf.UKnotSequence[len(surf.UKnotSequence)-1]
|
||||
umin = surf.UKnotSequence[0]
|
||||
vmax = surf.VKnotSequence[len(surf.VKnotSequence)-1]
|
||||
vmin = surf.VKnotSequence[0]
|
||||
UV[0] = uv[0]/(surf.UKnotSequence[len(surf.UKnotSequence)-1])
|
||||
UV[1] = uv[1]/(surf.VKnotSequence[len(surf.VKnotSequence)-1])
|
||||
ru=abs(UV[0]-0.5)
|
||||
rv=abs(UV[1]-0.5)
|
||||
surf2 = self.faces[self.surfacesID[j][k]].Surface
|
||||
UV2 = surf2.parameter(self.sample[j][k])
|
||||
uv2 = [UV2[0],UV2[1]]
|
||||
UV2 = uv2[:]
|
||||
umax2 = surf2.UKnotSequence[len(surf2.UKnotSequence)-1]
|
||||
umin2 = surf2.UKnotSequence[0]
|
||||
vmax2 = surf2.VKnotSequence[len(surf2.VKnotSequence)-1]
|
||||
vmin2 = surf2.VKnotSequence[0]
|
||||
UV2[0] = uv2[0]/(surf2.UKnotSequence[len(surf2.UKnotSequence)-1])
|
||||
UV2[1] = uv2[1]/(surf2.VKnotSequence[len(surf2.VKnotSequence)-1])
|
||||
ru2=abs(UV2[0]-0.5)
|
||||
rv2=abs(UV2[1]-0.5)
|
||||
point=surf.value(UV[0],UV[1])
|
||||
point2=surf2.value(UV2[0],UV2[1])
|
||||
dif= math.sqrt((point[0]-self.sample[j][k][0])**2+(point[1]-self.sample[j][k][1])**2+(point[2]-self.sample[j][k][2])**2)
|
||||
dif2= math.sqrt((point2[0]-self.sample[j][k][0])**2+(point2[1]-self.sample[j][k][1])**2+(point2[2]-self.sample[j][k][2])**2)
|
||||
nU = len(self.points)
|
||||
nV = len(self.points[j])
|
||||
deltaU = 1/(2*nU)
|
||||
deltaV = 1/(2*nV)
|
||||
if ((ru < deltaU) and (rv < deltaV)):
|
||||
uv[0] = max(min(uv[0],umax), umin)
|
||||
uv[1] = max(min(uv[1],vmax), vmin)
|
||||
self.uv[j][k]=uv
|
||||
point = surf.value(uv[0], uv[1])
|
||||
self.points[j][k]=point
|
||||
self.surfacesID[j][k] = i
|
||||
elif (dif2 > dif):
|
||||
uv[0] = max(min(uv[0],umax), umin)
|
||||
uv[1] = max(min(uv[1],vmax), vmin)
|
||||
self.uv[j][k]=uv
|
||||
point = surf.value(uv[0], uv[1])
|
||||
self.points[j][k]=point
|
||||
self.surfacesID[j][k] = i
|
||||
return False
|
||||
|
||||
def redistributePointsU(self):
|
||||
""" Redistributes the points of the surface (U direction).
|
||||
@return False if all points are right placed. True otherwise.
|
||||
"""
|
||||
#Redistribute columns
|
||||
for i in range(0,len(self.points)):
|
||||
sumdif=0.0
|
||||
difs=[]
|
||||
# Compute distances between points
|
||||
for j in range(1,len(self.points[i])):
|
||||
vdif=self.points[i][j]-self.points[i][j-1]
|
||||
dif=vdif.Length
|
||||
sumdif=sumdif+dif
|
||||
difs.append(dif)
|
||||
# Loop over point distances
|
||||
for k in range(0,len(difs)):
|
||||
# If not the same surface for each point, UV
|
||||
# redistribution is not valid, so 3D points must be
|
||||
# edited (more effort and worst convergency).
|
||||
if self.surfacesID[i][k] != self.surfacesID[i][k+1]:
|
||||
if difs[k]>=(2*sumdif/len(difs)):
|
||||
point1 = App.Base.Vector(0.0,0.0,0.0)
|
||||
point1.x = self.points[i][k][0]+0.33*(self.points[i][k+1][0]-self.points[i][k][0])
|
||||
point1.y = self.points[i][k][1]+0.33*(self.points[i][k+1][1]-self.points[i][k][1])
|
||||
point1.z = self.points[i][k][2]+0.33*(self.points[i][k+1][2]-self.points[i][k][2])
|
||||
point2 = App.Base.Vector(0.0,0.0,0.0)
|
||||
point2.x = self.points[i][k+1][0]-0.33*(self.points[i][k+1][0]-self.points[i][k][0])
|
||||
point2.y = self.points[i][k+1][1]-0.33*(self.points[i][k+1][1]-self.points[i][k][1])
|
||||
point2.z = self.points[i][k+1][2]-0.33*(self.points[i][k+1][2]-self.points[i][k][2])
|
||||
moved = False
|
||||
if(k != 0):
|
||||
self.points[i][k] = point1
|
||||
surf1 = self.faces[self.surfacesID[i][k]].Surface
|
||||
uv = surf1.parameter(self.points[i][k])
|
||||
self.uv[i][k] = [uv[0], uv[1]]
|
||||
self.points[i][k]=surf1.value(self.uv[i][k][0],self.uv[i][k][1])
|
||||
moved = True
|
||||
if(k+1 != len(self.points[i])-1):
|
||||
self.points[i][k+1] = point2
|
||||
surf2 = self.faces[self.surfacesID[i][k+1]].Surface
|
||||
uv = surf2.parameter(self.points[i][k+1])
|
||||
self.uv[i][k+1] = [uv[0], uv[1]]
|
||||
self.points[i][k+1]=surf2.value(self.uv[i][k+1][0],self.uv[i][k+1][1])
|
||||
moved = True
|
||||
if moved:
|
||||
return True
|
||||
continue
|
||||
# If same surface for each point, UV
|
||||
# redistribution is possible, with better convergency
|
||||
# and less computation effort.
|
||||
if difs[k]>=(2*sumdif/len(difs)):
|
||||
uv1 = [0.0,0.0]
|
||||
uv1[0] = self.uv[i][k][0]+0.33*(self.uv[i][k+1][0]-self.uv[i][k][0])
|
||||
uv1[1] = self.uv[i][k][1]+0.33*(self.uv[i][k+1][1]-self.uv[i][k][1])
|
||||
uv2 = [0.0,0.0]
|
||||
uv2[0] = self.uv[i][k+1][0]-0.33*(self.uv[i][k+1][0]-self.uv[i][k][0])
|
||||
uv2[1] = self.uv[i][k+1][1]-0.33*(self.uv[i][k+1][1]-self.uv[i][k][1])
|
||||
moved = False
|
||||
if(k != 0):
|
||||
self.uv[i][k] = uv1[:]
|
||||
surf = self.faces[self.surfacesID[i][k]].Surface
|
||||
self.points[i][k] = surf.value(self.uv[i][k][0], self.uv[i][k][1])
|
||||
moved = True
|
||||
if(k+1 != len(self.points[i])-1):
|
||||
self.uv[i][k+1] = uv2[:]
|
||||
surf = self.faces[self.surfacesID[i][k+1]].Surface
|
||||
self.points[i][k+1] = surf.value(self.uv[i][k+1][0], self.uv[i][k+1][1])
|
||||
if moved:
|
||||
return True
|
||||
return False
|
||||
|
||||
def redistributePointsV(self):
|
||||
""" Redistributes the points of the surface (V direction).
|
||||
@return False if all points are right placed. True otherwise.
|
||||
"""
|
||||
#Redistribute rows
|
||||
for i in range(0,len(self.points[0])):
|
||||
sumdif=0
|
||||
difs=[]
|
||||
# Compute distances between points
|
||||
for j in range(1,len(self.points)):
|
||||
vdif=self.points[j][i]-self.points[j-1][i]
|
||||
dif=vdif.Length
|
||||
sumdif=sumdif+dif
|
||||
difs.append(dif)
|
||||
# Loop over point distances
|
||||
for k in range(0,len(difs)):
|
||||
# If not the same surface for each point, UV
|
||||
# redistribution is not valid, so 3D points must be
|
||||
# edited (more effort and worst convergency).
|
||||
if self.surfacesID[k][i] != self.surfacesID[k+1][i]:
|
||||
if difs[k]>=(2*sumdif/len(difs)):
|
||||
point1 = App.Base.Vector(0.0,0.0,0.0)
|
||||
point1.x = self.points[k][i][0]+0.33*(self.points[k+1][i][0]-self.points[k][i][0])
|
||||
point1.y = self.points[k][i][1]+0.33*(self.points[k+1][i][1]-self.points[k][i][1])
|
||||
point1.z = self.points[k][i][2]+0.33*(self.points[k+1][i][2]-self.points[k][i][2])
|
||||
point2 = App.Base.Vector(0.0,0.0,0.0)
|
||||
point2.x = self.points[k+1][i][0]-0.33*(self.points[k+1][i][0]-self.points[k][i][0])
|
||||
point2.y = self.points[k+1][i][1]-0.33*(self.points[k+1][i][1]-self.points[k][i][1])
|
||||
point2.z = self.points[k+1][i][2]-0.33*(self.points[k+1][i][2]-self.points[k][i][2])
|
||||
moved = False
|
||||
if(k != 0):
|
||||
self.points[k][i] = point1
|
||||
surf1 = self.faces[self.surfacesID[k][i]].Surface
|
||||
uv = surf1.parameter(self.points[k][i])
|
||||
self.uv[k][i] = [uv[0], uv[1]]
|
||||
self.points[k][i]=surf1.value(self.uv[k][i][0],self.uv[k][i][1])
|
||||
moved = True
|
||||
if(k+1 != len(self.points)-1):
|
||||
self.points[k+1][i] = point2
|
||||
surf2 = self.faces[self.surfacesID[k+1][i]].Surface
|
||||
uv = surf2.parameter(self.points[k+1][i])
|
||||
self.uv[k+1][i] = [uv[0], uv[1]]
|
||||
self.points[k+1][i]=surf2.value(self.uv[k+1][i][0],self.uv[k+1][i][1])
|
||||
moved = True
|
||||
if moved:
|
||||
return True
|
||||
continue
|
||||
# If same surface for each point, UV
|
||||
# redistribution is possible, with better convergency
|
||||
# and less computation effort.
|
||||
if difs[k]>=(2*sumdif/len(difs)):
|
||||
uv1 = [0.0,0.0]
|
||||
uv1[0] = self.uv[k][i][0]+0.33*(self.uv[k+1][i][0]-self.uv[k][i][0])
|
||||
uv1[1] = self.uv[k][i][1]+0.33*(self.uv[k+1][i][1]-self.uv[k][i][1])
|
||||
uv2 = [0.0,0.0]
|
||||
uv2[0] = self.uv[k+1][i][0]-0.33*(self.uv[k+1][i][0]-self.uv[k][i][0])
|
||||
uv2[1] = self.uv[k+1][i][1]-0.33*(self.uv[k+1][i][1]-self.uv[k][i][1])
|
||||
moved = False
|
||||
if(k != 0):
|
||||
self.uv[i][k] = uv1[:]
|
||||
surf = self.faces[self.surfacesID[k][i]].Surface
|
||||
self.points[k][i] = surf.value(self.uv[k][i][0], self.uv[k][i][1])
|
||||
moved = True
|
||||
if(k+1 != len(self.points[i])-1):
|
||||
self.uv[i][k+1] = uv2[:]
|
||||
surf = self.faces[self.surfacesID[k+1][i]].Surface
|
||||
self.points[k+1][i] = surf.value(self.uv[k+1][i][0], self.uv[k+1][i][1])
|
||||
if moved:
|
||||
return True
|
||||
return False
|
||||
|
||||
def createSurface(self):
|
||||
""" Generates the BSpline surface.
|
||||
@return False if all gone right. True otherwise.
|
||||
"""
|
||||
# Create a (1 x 1) plane with (nU x nV) knots
|
||||
self.surf = App.Part.BSplineSurface()
|
||||
nU = len(self.points)
|
||||
nV = len(self.points[0])
|
||||
for i in range(1,nU-1):
|
||||
u = i / float(nU-1)
|
||||
self.surf.insertUKnot(u,i,0.000001)
|
||||
for i in range(1,nV-1):
|
||||
v = i / float(nV-1)
|
||||
self.surf.insertVKnot(v,i,0.000001)
|
||||
# Reposition points of surface
|
||||
for i in range(0,nU):
|
||||
for j in range(0,nV):
|
||||
u = i / float(nU-1)
|
||||
v = j / float(nV-1)
|
||||
point = self.points[i][j]
|
||||
self.surf.movePoint(u,v,point,i+1,i+1,j+1,j+1)
|
||||
# Reaconditionate surface
|
||||
self.surf.exchangeUV()
|
||||
deg = self.form.deg.value()
|
||||
if (deg > 1) and (deg < self.surf.MaxDegree):
|
||||
self.surf.increaseDegree(deg,deg)
|
||||
return False
|
||||
|
||||
def createTask():
|
||||
""" Create a task panel.
|
||||
@return Task panel.
|
||||
"""
|
||||
panel = TaskPanel()
|
||||
Gui.Control.showDialog(panel)
|
||||
if panel.setupUi():
|
||||
Gui.Control.closeDialog(panel)
|
||||
return None
|
||||
return panel
|
|
@ -1,107 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>TaskPanel</class>
|
||||
<widget class="QWidget" name="TaskPanel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>307</width>
|
||||
<height>268</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Convert surface</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="nULabel">
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#0000ff;">Points at U</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="nU">
|
||||
<property name="minimum">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>10000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="nVLabel">
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600; color:#ff0000;">Points at V</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="nV">
|
||||
<property name="minimum">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>10000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="degLabel">
|
||||
<property name="text">
|
||||
<string>Surface degree</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QSpinBox" name="deg">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>25</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>3</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>15</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -1,37 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
|
||||
# Qt libraries
|
||||
from PyQt4 import QtGui,QtCore
|
||||
|
||||
# Main object
|
||||
import TaskPanel
|
||||
from surfUtils import Paths
|
||||
|
||||
def load():
|
||||
""" Loads the tool """
|
||||
TaskPanel.createTask()
|
|
@ -1,88 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD as App
|
||||
import FreeCADGui as Gui
|
||||
import Draft
|
||||
from FreeCAD import Vector
|
||||
# Qt library
|
||||
from PyQt4 import QtGui,QtCore
|
||||
# Pivy
|
||||
import pivy
|
||||
from pivy import coin
|
||||
from pivy.coin import *
|
||||
# Module
|
||||
from surfUtils import Paths
|
||||
from surfUtils import Geometry
|
||||
from surfISOCurve import Preview
|
||||
|
||||
class PointTracker:
|
||||
def __init__(self,view,task):
|
||||
self.view=view
|
||||
self.task=task
|
||||
task.tracker = self
|
||||
self.callback = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.mouseButton)
|
||||
self.callbackMove = self.view.addEventCallbackPivy(SoLocation2Event.getClassTypeId(),self.mouseMove)
|
||||
|
||||
def mouseMove(self, event_cb):
|
||||
event = event_cb.getEvent()
|
||||
surf = self.task.surf
|
||||
if not surf:
|
||||
return
|
||||
# Get screen point
|
||||
screen = event.getPosition()
|
||||
ctrl = event.wasCtrlDown()
|
||||
# Get snapped object if exist, else the screen point will used
|
||||
point = Gui.Snapper.snap(screen, ctrl)
|
||||
|
||||
def mouseButton(self, event_cb):
|
||||
event = event_cb.getEvent()
|
||||
if event.getState() != coin.SoMouseButtonEvent.DOWN:
|
||||
return
|
||||
surf = self.task.surf
|
||||
if not surf:
|
||||
return
|
||||
# Get screen point
|
||||
screen = event.getPosition()
|
||||
ctrl = event.wasCtrlDown()
|
||||
# Get snapped object if exist, else the screen point will used
|
||||
point = Gui.Snapper.snap(screen, ctrl)
|
||||
if not point:
|
||||
point = self.view.getPoint(screen[0],screen[1])
|
||||
# Get the nearest surface point parameter
|
||||
uv = surf.parameter(point)
|
||||
uv = [uv[0], uv[1]]
|
||||
uv[0] = uv[0] / surf.UKnotSequence[len(surf.UKnotSequence)-1]
|
||||
uv[0] = max(0, min(uv[0], 1))
|
||||
uv[1] = uv[1] / surf.VKnotSequence[len(surf.VKnotSequence)-1]
|
||||
uv[1] = max(0, min(uv[1], 1))
|
||||
# Set it into the task panel
|
||||
self.task.setUV(uv[self.task.dirId])
|
||||
|
||||
def close(self):
|
||||
# Switch off snapping
|
||||
Gui.Snapper.off()
|
||||
# Remove callback (Program crash otherwise)
|
||||
self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callback)
|
||||
self.view.removeEventCallbackPivy(SoLocation2Event.getClassTypeId(),self.callbackMove)
|
|
@ -1,125 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD,FreeCADGui
|
||||
from FreeCAD import Base
|
||||
from FreeCAD import Part
|
||||
# FreeCADShip modules
|
||||
from surfUtils import Paths
|
||||
from surfUtils import Geometry
|
||||
from surfUtils import Math
|
||||
|
||||
class Preview(object):
|
||||
def __init__(self):
|
||||
""" Constructor.
|
||||
@param self Auto call object.
|
||||
@note Start it as unactive
|
||||
"""
|
||||
self.obj = None
|
||||
self.reinit()
|
||||
|
||||
def reinit(self):
|
||||
""" Reinitializate drawer.
|
||||
@param self Auto call object.
|
||||
"""
|
||||
self.clean()
|
||||
self.obj = None
|
||||
|
||||
def update(self, surf, direction, uv):
|
||||
""" Update the 3D view printing curve.
|
||||
@param self Auto call object.
|
||||
@param surf Surf where get the curve.
|
||||
@param direction 0 if u direction, 1 if v.
|
||||
@param uv Curve uv index, between 0 and 1.
|
||||
@return Curve from object (as Part::Feature).
|
||||
"""
|
||||
# Errors
|
||||
if not surf:
|
||||
return None
|
||||
# Get curve
|
||||
if direction == 0:
|
||||
curve = self.getU(surf, uv)
|
||||
elif direction == 1:
|
||||
curve = self.getV(surf, uv)
|
||||
else:
|
||||
return None
|
||||
# Draw at 3D view
|
||||
self.clean()
|
||||
Part.show(curve.toShape())
|
||||
objs = FreeCAD.ActiveDocument.Objects
|
||||
self.obj = objs[len(objs)-1]
|
||||
self.obj.Label = 'surfISOCurve'
|
||||
return self.obj
|
||||
|
||||
def getU(self, surf, uv):
|
||||
""" Get U curve from object.
|
||||
@param self Auto call object.
|
||||
@param surf Surf where get the curve.
|
||||
@param uv Curve uv index, between 0 and 1.
|
||||
@return Curve from object.
|
||||
"""
|
||||
# Errors
|
||||
if not surf:
|
||||
return None
|
||||
if (uv < 0.0) or (uv > 1.0):
|
||||
return None
|
||||
# Get UV data
|
||||
knots = surf.UKnotSequence
|
||||
id0 = knots[0]
|
||||
id1 = knots[len(knots)-1]
|
||||
# Get curve
|
||||
curve = surf.uIso(id0 + uv*(id1-id0))
|
||||
return curve
|
||||
|
||||
def getV(self, surf, uv):
|
||||
""" Get U curve from object.
|
||||
@param self Auto call object.
|
||||
@param surf Surf where get the curve.
|
||||
@param uv Curve uv index, between 0 and 1.
|
||||
@return Curve from object.
|
||||
"""
|
||||
# Errors
|
||||
if not surf:
|
||||
return None
|
||||
if (uv < 0.0) or (uv > 1.0):
|
||||
return None
|
||||
# Get UV data
|
||||
knots = surf.VKnotSequence
|
||||
id0 = knots[0]
|
||||
id1 = knots[len(knots)-1]
|
||||
# Get curve
|
||||
curve = surf.vIso(id0 + uv*(id1-id0))
|
||||
return curve
|
||||
|
||||
def clean(self,Destroy=True):
|
||||
""" Erase all sections from screen.
|
||||
@param self Auto call object.
|
||||
@param Destroy True if the object must be destroyed, False otherwise.
|
||||
"""
|
||||
if not self.obj:
|
||||
return
|
||||
FreeCADGui.ActiveDocument.hide(self.obj.Name)
|
||||
if Destroy:
|
||||
FreeCAD.ActiveDocument.removeObject(self.obj.Name)
|
||||
self.obj=None
|
|
@ -1,168 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD as App
|
||||
import FreeCADGui as Gui
|
||||
# Qt library
|
||||
from PyQt4 import QtGui,QtCore
|
||||
# Module
|
||||
from surfUtils import Paths, Geometry, Math, Translator
|
||||
import Preview
|
||||
import PointTracker
|
||||
|
||||
class TaskPanel:
|
||||
def __init__(self):
|
||||
self.ui = Paths.modulePath() + "/surfISOCurve/TaskPanel.ui"
|
||||
self.preview = Preview.Preview()
|
||||
self.tracker = None
|
||||
|
||||
def accept(self):
|
||||
if not self.obj:
|
||||
return True
|
||||
self.obj.Label = 'ISOCurve'
|
||||
self.close()
|
||||
return True
|
||||
|
||||
def reject(self):
|
||||
self.preview.clean()
|
||||
self.close()
|
||||
return True
|
||||
|
||||
def clicked(self, index):
|
||||
pass
|
||||
|
||||
def open(self):
|
||||
pass
|
||||
|
||||
def needsFullSpace(self):
|
||||
return True
|
||||
|
||||
def isAllowedAlterSelection(self):
|
||||
return False
|
||||
|
||||
def isAllowedAlterView(self):
|
||||
return True
|
||||
|
||||
def isAllowedAlterDocument(self):
|
||||
return False
|
||||
|
||||
def helpRequested(self):
|
||||
pass
|
||||
|
||||
def setupUi(self):
|
||||
mw = self.getMainWindow()
|
||||
form = mw.findChild(QtGui.QWidget, "TaskPanel")
|
||||
form.direction = form.findChild(QtGui.QComboBox, "direction")
|
||||
form.uv = form.findChild(QtGui.QSlider, "uv")
|
||||
form.uvText = form.findChild(QtGui.QDoubleSpinBox, "uvText")
|
||||
self.form = form
|
||||
# Initial values
|
||||
if self.initValues():
|
||||
return True
|
||||
self.obj = self.preview.update(self.surf, self.dirId, self.uv)
|
||||
self.retranslateUi()
|
||||
# Connect Signals and Slots
|
||||
QtCore.QObject.connect(form.direction, QtCore.SIGNAL("activated(QString)"), self.selectDirection)
|
||||
QtCore.QObject.connect(form.uv, QtCore.SIGNAL("valueChanged(int)"), self.onUVSlider)
|
||||
QtCore.QObject.connect(form.uvText, QtCore.SIGNAL("valueChanged(double)"), self.onUVText)
|
||||
|
||||
def getMainWindow(self):
|
||||
"returns the main window"
|
||||
# using QtGui.qApp.activeWindow() isn't very reliable because if another
|
||||
# widget than the mainwindow is active (e.g. a dialog) the wrong widget is
|
||||
# returned
|
||||
toplevel = QtGui.qApp.topLevelWidgets()
|
||||
for i in toplevel:
|
||||
if i.metaObject().className() == "Gui::MainWindow":
|
||||
return i
|
||||
raise Exception("No main window found")
|
||||
|
||||
def selectDirection(self):
|
||||
self.dirId = self.form.direction.currentIndex()
|
||||
self.obj = self.preview.update(self.surf, self.dirId, self.uv)
|
||||
if not self.obj:
|
||||
msg = Translator.translate("Can't get the curve from selected object")
|
||||
App.Console.PrintWarning(msg)
|
||||
|
||||
def onUVSlider(self, value):
|
||||
uv = self.form.uv.value()
|
||||
uv = uv/(float(self.form.uv.maximum()))
|
||||
self.setUV(uv)
|
||||
|
||||
def onUVText(self, value):
|
||||
uv = self.form.uvText.value()
|
||||
self.setUV(uv)
|
||||
|
||||
def setUV(self, uv):
|
||||
self.form.uv.setValue(uv*self.form.uv.maximum())
|
||||
self.form.uvText.setValue(uv)
|
||||
self.uv = uv
|
||||
if not self.surf:
|
||||
return
|
||||
self.obj = self.preview.update(self.surf, self.dirId, self.uv)
|
||||
if not self.obj:
|
||||
msg = Translator.translate("Can't get the curve from selected object")
|
||||
App.Console.PrintWarning(msg)
|
||||
|
||||
def initValues(self):
|
||||
self.obj = None
|
||||
self.dirId = 0
|
||||
self.uv = 0
|
||||
self.surf = None
|
||||
self.selObj = Geometry.getSelectedObj()
|
||||
if not self.selObj:
|
||||
msg = Translator.translate("1 surface must be selected (Any object has been selected)")
|
||||
App.Console.PrintError(msg)
|
||||
return True
|
||||
self.surf = Geometry.getSelectedSurface()
|
||||
if not self.surf:
|
||||
msg = Translator.translate("1 surface must be selected (Any face object found into selected objects)")
|
||||
App.Console.PrintError(msg)
|
||||
return True
|
||||
msg = Translator.translate("Ready to work")
|
||||
App.Console.PrintMessage(msg)
|
||||
return False
|
||||
|
||||
def retranslateUi(self):
|
||||
""" Set user interface locale strings.
|
||||
"""
|
||||
self.form.setWindowTitle(Translator.translate("Get surface ISO curve"))
|
||||
self.form.direction.setItemText(0, Translator.translate("U direction"))
|
||||
self.form.direction.setItemText(1, Translator.translate("V direction"))
|
||||
|
||||
def close(self):
|
||||
""" Destroy all dependant objects
|
||||
@param self Main object.
|
||||
"""
|
||||
if self.tracker:
|
||||
self.tracker.close()
|
||||
|
||||
def createTask():
|
||||
panel = TaskPanel()
|
||||
Gui.Control.showDialog(panel)
|
||||
if panel.setupUi():
|
||||
Gui.Control.closeDialog(panel)
|
||||
return None
|
||||
tracker = PointTracker.PointTracker(Gui.ActiveDocument.ActiveView, panel)
|
||||
return panel
|
|
@ -1,65 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>TaskPanel</class>
|
||||
<widget class="QWidget" name="TaskPanel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>307</width>
|
||||
<height>268</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Get ISO curve from surface</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QComboBox" name="direction">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>U direction</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>V direction</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QSlider" name="uv">
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>10000</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="3">
|
||||
<widget class="QDoubleSpinBox" name="uvText">
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.010000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -1,37 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
|
||||
# Qt libraries
|
||||
from PyQt4 import QtGui,QtCore
|
||||
|
||||
# Main object
|
||||
import TaskPanel
|
||||
from surfUtils import Paths
|
||||
|
||||
def load():
|
||||
""" Loads the tool """
|
||||
TaskPanel.createTask()
|
|
@ -1,71 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD as App
|
||||
import FreeCADGui as Gui
|
||||
import Draft
|
||||
from FreeCAD import Vector
|
||||
# Qt library
|
||||
from PyQt4 import QtGui,QtCore
|
||||
# Pivy
|
||||
import pivy
|
||||
from pivy import coin
|
||||
from pivy.coin import *
|
||||
# Module
|
||||
from surfUtils import Paths
|
||||
from surfUtils import Geometry
|
||||
from surfSlice import Preview
|
||||
|
||||
class PointTracker:
|
||||
def __init__(self,view,task):
|
||||
self.view=view
|
||||
self.task=task
|
||||
task.tracker = self
|
||||
self.callback = self.view.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.mouseButton)
|
||||
self.callbackMove = self.view.addEventCallbackPivy(SoLocation2Event.getClassTypeId(),self.mouseMove)
|
||||
|
||||
def mouseMove(self, event_cb):
|
||||
event = event_cb.getEvent()
|
||||
# Get screen point
|
||||
screen = event.getPosition()
|
||||
ctrl = event.wasCtrlDown()
|
||||
# Get snapped object if exist, else the screen point will used
|
||||
point = Gui.Snapper.snap(screen, ctrl)
|
||||
|
||||
def mouseButton(self, event_cb):
|
||||
event = event_cb.getEvent()
|
||||
if event.getState() != coin.SoMouseButtonEvent.DOWN:
|
||||
return
|
||||
# Get screen point
|
||||
screen = event.getPosition()
|
||||
ctrl = event.wasCtrlDown()
|
||||
# Get snapped object if exist, else the screen point will used
|
||||
point = Gui.Snapper.snap(screen, ctrl)
|
||||
if not point:
|
||||
point = self.view.getPoint(screen[0],screen[1])
|
||||
# Set it into the task panel
|
||||
self.task.setR3(point)
|
||||
|
||||
def close(self):
|
||||
self.view.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(),self.callback)
|
|
@ -1,100 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD,FreeCADGui
|
||||
from FreeCAD import Base
|
||||
from FreeCAD import Part
|
||||
# FreeCADShip modules
|
||||
from surfUtils import Paths
|
||||
from surfUtils import Geometry
|
||||
from surfUtils import Math
|
||||
|
||||
class Preview(object):
|
||||
def __init__(self):
|
||||
""" Constructor.
|
||||
@param self Auto call object.
|
||||
@note Start it as unactive
|
||||
"""
|
||||
self.objs = None
|
||||
self.reinit()
|
||||
|
||||
def reinit(self):
|
||||
""" Reinitializate drawer.
|
||||
@param self Auto call object.
|
||||
"""
|
||||
self.clean()
|
||||
self.objs = None
|
||||
|
||||
def update(self, surf, direction, r):
|
||||
""" Update the 3D view printing curve.
|
||||
@param surf Surf where get the curve.
|
||||
@param direction Slice plane normal vector.
|
||||
@param r Absolute position at Slice plane normal direction.
|
||||
@return Curve from object (as Part::Feature).
|
||||
"""
|
||||
# Errors
|
||||
if not surf:
|
||||
return None
|
||||
# Get curve
|
||||
curve = self.getSlice(surf, direction, r)
|
||||
# Draw at 3D view
|
||||
self.clean()
|
||||
self.objs = []
|
||||
for i in range(0,len(curve)):
|
||||
for j in range(0,len(curve[i])):
|
||||
Part.show(curve[i][j])
|
||||
objs = FreeCAD.ActiveDocument.Objects
|
||||
objs[len(objs)-1].Label = 'surfSliceCurve'
|
||||
self.objs.append(objs[len(objs)-1])
|
||||
return self.objs
|
||||
|
||||
def getSlice(self, surf, direction, r):
|
||||
""" Get surface slice.
|
||||
@param surf Surf where get the curve.
|
||||
@param direction Slice plane normal vector.
|
||||
@param r Absolute position at Slice plane normal direction.
|
||||
@return Curve from object.
|
||||
"""
|
||||
# Errors
|
||||
if not surf:
|
||||
return None
|
||||
# Get curve
|
||||
curve = []
|
||||
for i in range(0,len(surf)):
|
||||
curve.append(surf[i].slice(direction, r))
|
||||
return curve
|
||||
|
||||
def clean(self,Destroy=True):
|
||||
""" Erase all sections from screen.
|
||||
@param self Auto call object.
|
||||
@param Destroy True if the object must be destroyed, False otherwise.
|
||||
"""
|
||||
if not self.objs:
|
||||
return
|
||||
for i in range(0,len(self.objs)):
|
||||
FreeCADGui.ActiveDocument.hide(self.objs[i].Name)
|
||||
if Destroy:
|
||||
FreeCAD.ActiveDocument.removeObject(self.objs[i].Name)
|
||||
if Destroy:
|
||||
self.objs=None
|
|
@ -1,217 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD as App
|
||||
import FreeCADGui as Gui
|
||||
from FreeCAD import Vector
|
||||
# Qt library
|
||||
from PyQt4 import QtGui,QtCore
|
||||
# Module
|
||||
from surfUtils import Paths, Geometry, Math, Translator
|
||||
import Preview
|
||||
import PointTracker
|
||||
|
||||
class TaskPanel:
|
||||
def __init__(self):
|
||||
self.ui = Paths.modulePath() + "/surfSlice/TaskPanel.ui"
|
||||
self.preview = Preview.Preview()
|
||||
self.tracker = None
|
||||
self.dir = Vector(0.0,0.0,1.0)
|
||||
|
||||
def accept(self):
|
||||
if not self.objs:
|
||||
return True
|
||||
for i in range(0,len(self.objs)):
|
||||
self.objs[i].Label = 'SliceCurve'
|
||||
self.close()
|
||||
return True
|
||||
|
||||
def reject(self):
|
||||
self.preview.clean()
|
||||
self.close()
|
||||
return True
|
||||
|
||||
def clicked(self, index):
|
||||
pass
|
||||
|
||||
def open(self):
|
||||
pass
|
||||
|
||||
def needsFullSpace(self):
|
||||
return True
|
||||
|
||||
def isAllowedAlterSelection(self):
|
||||
return False
|
||||
|
||||
def isAllowedAlterView(self):
|
||||
return True
|
||||
|
||||
def isAllowedAlterDocument(self):
|
||||
return False
|
||||
|
||||
def helpRequested(self):
|
||||
pass
|
||||
|
||||
def setupUi(self):
|
||||
mw = self.getMainWindow()
|
||||
form = mw.findChild(QtGui.QWidget, "TaskPanel")
|
||||
form.direction = form.findChild(QtGui.QComboBox, "direction")
|
||||
form.r = form.findChild(QtGui.QSlider, "r")
|
||||
form.rText = form.findChild(QtGui.QDoubleSpinBox, "rText")
|
||||
self.form = form
|
||||
# Initial values
|
||||
if self.initValues():
|
||||
return True
|
||||
self.retranslateUi()
|
||||
self.form.rText.setMinimum(self.bound[4])
|
||||
self.form.rText.setMaximum(self.bound[5])
|
||||
self.setR(self.r)
|
||||
# Connect Signals and Slots
|
||||
QtCore.QObject.connect(form.direction, QtCore.SIGNAL("activated(QString)"), self.selectDirection)
|
||||
QtCore.QObject.connect(form.r, QtCore.SIGNAL("valueChanged(int)"), self.onRSlider)
|
||||
QtCore.QObject.connect(form.rText, QtCore.SIGNAL("valueChanged(double)"), self.onRText)
|
||||
return False
|
||||
|
||||
def getMainWindow(self):
|
||||
"returns the main window"
|
||||
# using QtGui.qApp.activeWindow() isn't very reliable because if another
|
||||
# widget than the mainwindow is active (i.e. a dialog) the wrong widget is
|
||||
# returned
|
||||
toplevel = QtGui.qApp.topLevelWidgets()
|
||||
for i in toplevel:
|
||||
if i.metaObject().className() == "Gui::MainWindow":
|
||||
return i
|
||||
raise Exception("No main window found")
|
||||
|
||||
def selectDirection(self):
|
||||
if(self.form.direction.currentIndex() == 0): # XY
|
||||
self.dir = Vector(0.0,0.0,1.0)
|
||||
self.r = max(self.r, self.bound[4])
|
||||
self.r = min(self.r, self.bound[5])
|
||||
self.form.rText.setMinimum(self.bound[4])
|
||||
self.form.rText.setMaximum(self.bound[5])
|
||||
if(self.form.direction.currentIndex() == 1): # XZ
|
||||
self.dir = Vector(0.0,1.0,0.0)
|
||||
self.r = max(self.r, self.bound[2])
|
||||
self.r = min(self.r, self.bound[3])
|
||||
self.form.rText.setMinimum(self.bound[2])
|
||||
self.form.rText.setMaximum(self.bound[3])
|
||||
if(self.form.direction.currentIndex() == 2): # YZ
|
||||
self.dir = Vector(1.0,0.0,0.0)
|
||||
self.r = max(self.r, self.bound[0])
|
||||
self.r = min(self.r, self.bound[1])
|
||||
self.form.rText.setMinimum(self.bound[0])
|
||||
self.form.rText.setMaximum(self.bound[1])
|
||||
self.objs = self.preview.update(self.face, self.dir, self.r)
|
||||
if not self.objs:
|
||||
msg = Translator.translate("Can't calculate section")
|
||||
App.Console.PrintWarning(msg)
|
||||
|
||||
def onRSlider(self, value):
|
||||
# Get r at [0,1] interval
|
||||
r = self.form.r.value()
|
||||
r = r/(float(self.form.r.maximum()))
|
||||
# Expand to real interval
|
||||
dr = self.form.rText.maximum()-self.form.rText.minimum()
|
||||
r = r*dr + self.form.rText.minimum()
|
||||
# Set value
|
||||
self.setR(r)
|
||||
|
||||
def onRText(self, value):
|
||||
r = self.form.rText.value()
|
||||
self.setR(r)
|
||||
|
||||
def setR(self, r):
|
||||
self.form.rText.setValue(r)
|
||||
self.r = max(self.form.rText.minimum(), min(self.form.rText.maximum(), r))
|
||||
dr = self.form.rText.maximum()-self.form.rText.minimum()
|
||||
r = (r - self.form.rText.minimum())/dr*self.form.r.maximum()
|
||||
self.form.r.setValue(r)
|
||||
if not self.face:
|
||||
return
|
||||
self.objs = self.preview.update(self.face, self.dir, self.r)
|
||||
if not self.objs:
|
||||
msg = Translator.translate("Can't calculate section")
|
||||
App.Console.PrintWarning(msg)
|
||||
|
||||
def setR3(self, r):
|
||||
if(self.form.direction.currentIndex() == 0): # XY
|
||||
self.setR(r.z)
|
||||
if(self.form.direction.currentIndex() == 1): # XZ
|
||||
self.setR(r.y)
|
||||
if(self.form.direction.currentIndex() == 2): # YZ
|
||||
self.setR(r.x)
|
||||
|
||||
def initValues(self):
|
||||
self.objs = None
|
||||
self.dir = Vector(0.0,0.0,1.0)
|
||||
self.r = 0.0
|
||||
self.face = None
|
||||
self.selObj = Geometry.getSelectedObj()
|
||||
if not self.selObj:
|
||||
msg = Translator.translate("At least 1 surface must be selected (Any selected object)")
|
||||
App.Console.PrintError(msg)
|
||||
return True
|
||||
self.face = Geometry.getFaces()
|
||||
if not self.face:
|
||||
msg = Translator.translate("At least 1 surface must be selected (Any face object found into selected objects)")
|
||||
App.Console.PrintError(msg)
|
||||
return True
|
||||
bound = self.face[0].BoundBox
|
||||
self.bound = [bound.XMin, bound.XMax, bound.YMin, bound.YMax, bound.ZMin, bound.ZMax]
|
||||
for i in range(1,len(self.face)):
|
||||
face = self.face[i]
|
||||
bound = face.BoundBox
|
||||
self.bound[0] = min(self.bound[0],bound.XMin)
|
||||
self.bound[1] = min(self.bound[1],bound.XMax)
|
||||
self.bound[2] = min(self.bound[2],bound.YMin)
|
||||
self.bound[3] = min(self.bound[3],bound.YMax)
|
||||
self.bound[4] = min(self.bound[4],bound.ZMin)
|
||||
self.bound[5] = min(self.bound[5],bound.ZMax)
|
||||
self.r = max(self.r, self.bound[4])
|
||||
self.r = min(self.r, self.bound[5])
|
||||
msg = Translator.translate("Ready to work")
|
||||
App.Console.PrintMessage(msg)
|
||||
return False
|
||||
|
||||
def retranslateUi(self):
|
||||
""" Set user interface locale strings.
|
||||
"""
|
||||
self.form.setWindowTitle(Translator.translate("Get surface slice"))
|
||||
|
||||
def close(self):
|
||||
""" Destroy all dependant objects
|
||||
@param self Main object.
|
||||
"""
|
||||
if self.tracker:
|
||||
self.tracker.close()
|
||||
|
||||
def createTask():
|
||||
panel = TaskPanel()
|
||||
Gui.Control.showDialog(panel)
|
||||
if panel.setupUi():
|
||||
Gui.Control.closeDialog(panel)
|
||||
return None
|
||||
tracker = PointTracker.PointTracker(Gui.ActiveDocument.ActiveView, panel)
|
||||
return panel
|
|
@ -1,70 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>TaskPanel</class>
|
||||
<widget class="QWidget" name="TaskPanel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>307</width>
|
||||
<height>268</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Get surface slice</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QComboBox" name="direction">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>XY</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>XZ</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>YZ</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QSlider" name="r">
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>10000</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="3">
|
||||
<widget class="QDoubleSpinBox" name="rText">
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.010000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -1,37 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# FreeCAD modules
|
||||
import FreeCAD
|
||||
import FreeCADGui
|
||||
|
||||
# Qt libraries
|
||||
from PyQt4 import QtGui,QtCore
|
||||
|
||||
# Main object
|
||||
import TaskPanel
|
||||
from surfUtils import Paths
|
||||
|
||||
def load():
|
||||
""" Loads the tool """
|
||||
TaskPanel.createTask()
|
|
@ -1,175 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import math
|
||||
# FreeCAD
|
||||
import FreeCAD, FreeCADGui
|
||||
from FreeCAD import Base
|
||||
#from FreeCAD import Part
|
||||
import Part
|
||||
# FreeCAD ship
|
||||
from surfUtils import Math
|
||||
|
||||
def getSelectedObjs():
|
||||
""" Returns the selected objects list
|
||||
@return Selected objects list
|
||||
"""
|
||||
return FreeCADGui.Selection.getSelection()
|
||||
|
||||
def getSelectedObj():
|
||||
""" Returns the first element of the selected objects list
|
||||
@return Selected object. None if errors happens
|
||||
"""
|
||||
objs = FreeCADGui.Selection.getSelection()
|
||||
if not objs:
|
||||
return None
|
||||
if not len(objs):
|
||||
return None
|
||||
obj = objs[0]
|
||||
return FreeCAD.ActiveDocument.getObject(obj.Name)
|
||||
|
||||
def getEdges(objs=None):
|
||||
""" Returns object edges (list of them)
|
||||
@param objs Object to get the faces, none if selected
|
||||
object may used.
|
||||
@return Selected edges. None if errors happens
|
||||
"""
|
||||
edges = []
|
||||
if not objs:
|
||||
objs = FreeCADGui.Selection.getSelection()
|
||||
if not objs:
|
||||
return None
|
||||
for i in range(0, len(objs)):
|
||||
obj = objs[i]
|
||||
if obj.isDerivedFrom('Part::Feature'):
|
||||
# get shape
|
||||
shape = obj.Shape
|
||||
if not shape:
|
||||
return None
|
||||
obj = shape
|
||||
if not obj.isDerivedFrom('Part::TopoShape'):
|
||||
return None
|
||||
objEdges = obj.Edges
|
||||
if not objEdges:
|
||||
continue
|
||||
for j in range(0, len(objEdges)):
|
||||
edges.append(objEdges[j])
|
||||
return edges
|
||||
|
||||
def getFaces(obj=None):
|
||||
""" Returns object faces (list of them)
|
||||
@param obj Object to get the faces, none if selected
|
||||
object may used.
|
||||
@return Selected faces. None if errors happens
|
||||
"""
|
||||
if not obj:
|
||||
obj = getSelectedObj()
|
||||
if not obj:
|
||||
return None
|
||||
if obj.isDerivedFrom('Part::Feature'):
|
||||
# get shape
|
||||
shape = obj.Shape
|
||||
if not shape:
|
||||
return None
|
||||
obj = shape
|
||||
if not obj.isDerivedFrom('Part::TopoShape'):
|
||||
return None
|
||||
# get face
|
||||
faces = obj.Faces
|
||||
if not faces:
|
||||
return None
|
||||
if not len(faces):
|
||||
return None
|
||||
return faces
|
||||
|
||||
def getSelectedSurface(obj=None):
|
||||
""" Returns object surface (the first of the list)
|
||||
@param obj Object to get the surface, none if selected
|
||||
object may used.
|
||||
@return Selected surface. None if errors happens
|
||||
"""
|
||||
faces = getFaces(obj)
|
||||
if not faces:
|
||||
return None
|
||||
obj = faces[0]
|
||||
# get surface
|
||||
surf = obj.Surface
|
||||
if not surf:
|
||||
return None
|
||||
return surf
|
||||
|
||||
def getBorders(objs=None):
|
||||
""" Returns the borders of all selected objects as edge array
|
||||
@param objs Objects to get the edges, none if selected objects
|
||||
may used.
|
||||
@return Borders
|
||||
"""
|
||||
edges = []
|
||||
if not objs:
|
||||
objs = FreeCADGui.Selection.getSelection()
|
||||
if not objs:
|
||||
return None
|
||||
if len(objs) < 1:
|
||||
return None
|
||||
for i in range(0, len(objs)):
|
||||
faces = getFaces(objs[i])
|
||||
if not faces:
|
||||
continue
|
||||
for j in range(0, len(faces)):
|
||||
edgList = faces[j].Edges
|
||||
for k in range(0, len(edgList)):
|
||||
edges.append(edgList[k])
|
||||
return edges
|
||||
|
||||
|
||||
def lineFaceSection(line,surface):
|
||||
""" Returns the point of section of a line with a face
|
||||
@param line Line object, that can be a curve.
|
||||
@param surface Surface object (must be a Part::Shape)
|
||||
@return Section points array, [] if line don't cut surface
|
||||
"""
|
||||
# Get initial data
|
||||
result = []
|
||||
vertexes = line.Vertexes
|
||||
nVertex = len(vertexes)
|
||||
# Perform the cut
|
||||
section = line.cut(surface)
|
||||
# Filter all old points
|
||||
points = section.Vertexes
|
||||
nPoint = len(points)
|
||||
if nPoint <= nVertex:
|
||||
# Any valid point
|
||||
result
|
||||
for i in range(0,nPoint):
|
||||
disp = len(result)
|
||||
flag = 0
|
||||
if not Math.isAprox(points[i].X,vertexes[i-disp].X,0.0001):
|
||||
flag = flag+1
|
||||
if not Math.isAprox(points[i].Y,vertexes[i-disp].Y,0.0001):
|
||||
flag = flag+1
|
||||
if not Math.isAprox(points[i].Z,vertexes[i-disp].Z,0.0001):
|
||||
flag = flag+1
|
||||
if flag > 0:
|
||||
result.append(points[i])
|
||||
return result
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
def isAprox(a,b,tol=0.0001):
|
||||
"""returns if a value is into (b-tol,b+tol)
|
||||
@param a Value to compare.
|
||||
@param b Center of valid interval
|
||||
@param tol Radius of valid interval
|
||||
@return True if a is into (b-tol,b+tol), False otherwise
|
||||
"""
|
||||
if (a < b+abs(tol)) and (a > b-abs(tol)):
|
||||
return True
|
||||
return False
|
||||
|
||||
def isSamePoint(a,b,tol=0.0001):
|
||||
"""returns if two points are the same with a provided tolerance
|
||||
@param a Point to compare.
|
||||
@param b Reference point.
|
||||
@param tol Radius of valid interval
|
||||
@return True if twice point are the same, False otherwise
|
||||
@note FreeCAD::Base::Vector types must be provided
|
||||
"""
|
||||
if isAprox(a.x,b.x,tol) and isAprox(a.y,b.y,tol) and isAprox(a.z,b.z,tol):
|
||||
return True
|
||||
return False
|
||||
|
||||
def isSameVertex(a,b,tol=0.0001):
|
||||
"""returns if two points are the same with a provided tolerance
|
||||
@param a Point to compare.
|
||||
@param b Reference point.
|
||||
@param tol Radius of valid interval
|
||||
@return True if twice point are the same, False otherwise
|
||||
@note FreeCAD::Part::Vertex types must be provided
|
||||
"""
|
||||
if isAprox(a.X,b.X,tol) and isAprox(a.Y,b.Y,tol) and isAprox(a.Z,b.Z,tol):
|
||||
return True
|
||||
return False
|
|
@ -1,55 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import FreeCAD, FreeCADGui, os
|
||||
|
||||
def modulePath():
|
||||
"""returns the current Ship design module path
|
||||
@return Module path"""
|
||||
path1 = FreeCAD.ConfigGet("AppHomePath") + "Mod/Surfaces"
|
||||
path2 = FreeCAD.ConfigGet("UserAppData") + "Mod/Surfaces"
|
||||
if os.path.exists(path2):
|
||||
return path2
|
||||
else:
|
||||
return path1
|
||||
|
||||
def iconsPath():
|
||||
"""returns the current Ship design module icons path
|
||||
@return Icons path"""
|
||||
path = modulePath() + "/Icons"
|
||||
return path
|
||||
|
||||
def getPathFromFile(fileName):
|
||||
""" Gets the directory path from a file name
|
||||
@param fileName Name of the file
|
||||
@return Directory path.
|
||||
"""
|
||||
if not fileName:
|
||||
return ''
|
||||
i = 1
|
||||
try:
|
||||
while 1:
|
||||
i = fileName.index("/", i+1)
|
||||
except ValueError:
|
||||
pass
|
||||
return fileName[0:i+1]
|
|
@ -1,30 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import FreeCAD, FreeCADGui, os
|
||||
from PyQt4 import QtCore,QtGui
|
||||
|
||||
def translate(text,context="surfaces"):
|
||||
"convenience function for Qt translator"
|
||||
return QtGui.QApplication.translate(context, text, None,
|
||||
QtGui.QApplication.UnicodeUTF8)
|
|
@ -1,25 +0,0 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2011, 2012 *
|
||||
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
# Empty file to treat the folder as a package
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
/** \defgroup SURFACES Surfaces
|
||||
* \ingroup WORKBENCHES */
|
||||
|
Loading…
Reference in New Issue
Block a user