Release of 2017-02-05 :

Addition:
into "Point 1/3" TAB :
	Projected Point(s)
into "Wire 1/2" TAB :
	Convex 2D Polygon
Update:
into "Modif." TAB:
	Translate
Tutorials (into Doc/Tutorials directory):
WF_Tuto_MODIF_TranslationBySegment.mp4
WF_Tuto_POINTS_ProjectedPoints.mp4
WF_Tuto_POINTS_RandomPoints.mp4
WF_Tuto_WIRE_2DConvexPolygon.mp4
WF_Tuto_WIRE_CreatePolygon.mp4
WF_Tuto_WIRE_Regression2D.mp4
This commit is contained in:
Rentlau 2017-02-05 21:00:56 +01:00
parent 6fdc93bc2f
commit 5ea60a1920
25 changed files with 4374 additions and 6414 deletions

Binary file not shown.

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2918"
sodipodi:version="0.32"
inkscape:version="0.91 r13725"
sodipodi:docname="WF_click.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2920">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3191"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3183"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2926" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3075"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.6104543"
inkscape:cx="4.2038293"
inkscape:cy="31.812827"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1366"
inkscape:window-height="702"
inkscape:window-x="0"
inkscape:window-y="1227"
inkscape:window-maximized="1" />
<metadata
id="metadata2923">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g3177"
transform="matrix(-0.1459885,0.00366916,-0.00366916,-0.1459885,83.957793,125.97476)"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141" />
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path5799-2"
d="M 27.865364,32.991184 23.4039,47.623682 5.1420292,8.6874001 C 5.594662,7.243395 4.3516376,5.5692254 7.7077253,5.6469608 L 49.544536,22.069334 36.201615,26.606419 58.322749,45.403425 c 0.434076,4.442433 0.118637,8.445519 -7.920612,9.999191 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.29860783;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,619 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2918"
sodipodi:version="0.32"
inkscape:version="0.91 r13725"
sodipodi:docname="WF_convexPolygon.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.1">
<defs
id="defs2920">
<linearGradient
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient3183"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2926" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-6"
id="radialGradient4272"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-6">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-2" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-5" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4135-3"
id="linearGradient4145-1"
x1="131.82286"
y1="101.22672"
x2="191.3165"
y2="101.22672"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient4135-3">
<stop
style="stop-color:#0079ff;stop-opacity:1;"
offset="0"
id="stop4137-9" />
<stop
style="stop-color:#0079ff;stop-opacity:0;"
offset="1"
id="stop4139-2" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4135-3-5"
id="linearGradient4145-1-8"
x1="131.82286"
y1="101.22672"
x2="191.3165"
y2="101.22672"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient4135-3-5">
<stop
style="stop-color:#0079ff;stop-opacity:1;"
offset="0"
id="stop4137-9-3" />
<stop
style="stop-color:#0079ff;stop-opacity:0;"
offset="1"
id="stop4139-2-7" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient4558-0"
xlink:href="#linearGradient3144-6-2"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-6-2">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-2-4" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-5-6" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient4558-7"
xlink:href="#linearGradient3144-6-9"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144-6-9">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-2-7" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-5-7" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-9"
id="radialGradient3191"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
id="linearGradient3144-9">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-7" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-2" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-9-3"
id="radialGradient4852-4"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
id="linearGradient3144-9-3">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-7-5" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-2-7" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-9-4"
id="radialGradient4852-9"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
id="linearGradient3144-9-4">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146-7-7" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148-2-9" />
</linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6-1"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6-1-1"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6-1-1-9"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6-1-1-9-8"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6-1-1-9-8-6"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.6088565"
inkscape:cx="33.444373"
inkscape:cy="30.440063"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1366"
inkscape:window-height="702"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<metadata
id="metadata2923">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<ellipse
ry="6.2593665"
rx="5.8838305"
cy="45.098446"
cx="12.998963"
id="path3968"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79201269;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="6.2593665"
rx="5.8838305"
cy="60.551296"
cx="41.915024"
id="path3968-4"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79201269;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="6.2593665"
rx="5.8838305"
cy="16.978237"
cx="29.910881"
id="path3968-4-0"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79201269;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="6.2593665"
rx="5.8838305"
cy="23.941969"
cx="58.097412"
id="path3968-4-0-7"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.79201269;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:0.84700072;marker:none;enable-background:accumulate"
d="M 57.905786,19.105436 29.578034,12.560311 9.4255882,45.49815 37.837962,63.67851 40.480295,57.198698 17.086112,41.9762 31.690938,17.646862 57.053414,23.748653 Z"
id="path4425-9-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<g
id="g3177"
transform="matrix(-0.1459885,0.00366916,-0.00366916,-0.1459885,83.957793,125.97476)"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141" />
<path
style="display:inline;overflow:visible;visibility:visible;fill:#ffa100;fill-opacity:1;fill-rule:nonzero;stroke:#665123;stroke-width:0.84700072;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 58.555579,11.316021 22.307841,5.7938518 4.8450848,37.848895 40.042117,59.66807 41.293589,54.194078 11.233991,36.399782 24.986028,10.157803 57.773488,15.36902 Z"
id="path4425-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<g
id="g3177-3"
transform="matrix(-0.1459885,0.00366916,-0.00366916,-0.1459885,160.08538,105.57482)"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141" />
<g
id="g5734-5"
transform="translate(-14.861945,44.831094)">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-9"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7"
cx="197.14285"
cy="655.2193"
r="48.57143" />
<ellipse
style="fill:url(#radialGradient3264-9);fill-opacity:1;stroke:none"
id="path3134-2-9-0"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
</g>
<g
id="g5734-5-3"
transform="translate(-44.827027,25.163146)">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-9-7"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4"
cx="197.14285"
cy="655.2193"
r="48.57143" />
<ellipse
style="fill:url(#radialGradient3264-9-6);fill-opacity:1;stroke:none"
id="path3134-2-9-0-4"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
</g>
<g
id="g5734-5-3-5"
transform="translate(-30.895892,-3.6191024)">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-9-7-8"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9-6">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4-7"
cx="197.14285"
cy="655.2193"
r="48.57143" />
<ellipse
style="fill:url(#radialGradient3264-9-6-1);fill-opacity:1;stroke:none"
id="path3134-2-9-0-4-8"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
</g>
<g
id="g5734-5-3-5-2"
transform="translate(3.2748139,0.19224543)">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-9-7-8-5"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9-6-0">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4-7-5"
cx="197.14285"
cy="655.2193"
r="48.57143" />
<ellipse
style="fill:url(#radialGradient3264-9-6-1-1);fill-opacity:1;stroke:none"
id="path3134-2-9-0-4-8-5"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
</g>
<g
id="g5734-5-3-5-2-8"
transform="translate(-13.416262,11.494864)">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-9-7-8-5-8"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9-6-0-4">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4-7-5-2"
cx="197.14285"
cy="655.2193"
r="48.57143" />
<ellipse
style="fill:url(#radialGradient3264-9-6-1-1-9);fill-opacity:1;stroke:none"
id="path3134-2-9-0-4-8-5-8"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
</g>
<g
id="g5734-5-3-5-2-8-4"
transform="translate(-26.558841,19.643263)">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-9-7-8-5-8-4"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9-6-0-4-1">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4-7-5-2-2"
cx="197.14285"
cy="655.2193"
r="48.57143" />
<ellipse
style="fill:url(#radialGradient3264-9-6-1-1-9-8);fill-opacity:1;stroke:none"
id="path3134-2-9-0-4-8-5-8-0"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
</g>
<g
id="g5734-5-3-5-2-8-4-4"
transform="translate(-12.102003,28.974495)">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-9-7-8-5-8-4-8"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9-6-0-4-1-9">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4-7-5-2-2-5"
cx="197.14285"
cy="655.2193"
r="48.57143" />
<ellipse
style="fill:url(#radialGradient3264-9-6-1-1-9-8-6);fill-opacity:1;stroke:none"
id="path3134-2-9-0-4-8-5-8-0-5"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -182,17 +182,6 @@
offset="1" offset="1"
id="stop3148-2" /> id="stop3148-2" />
</linearGradient> </linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144-9"
id="radialGradient4852"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient <radialGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient3144-9-3" xlink:href="#linearGradient3144-9-3"
@ -215,17 +204,6 @@
offset="1" offset="1"
id="stop3148-2-7" /> id="stop3148-2-7" />
</linearGradient> </linearGradient>
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient4889"
xlink:href="#linearGradient3144-9-3"
inkscape:collect="always" />
<radialGradient <radialGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient3144-9-4" xlink:href="#linearGradient3144-9-4"
@ -256,20 +234,42 @@
cx="225.26402" cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)" gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
id="radialGradient4929" id="radialGradient3264-9"
xlink:href="#linearGradient3144-9-4" xlink:href="#linearGradient3144"
inkscape:collect="always" /> inkscape:collect="always" />
<radialGradient <radialGradient
inkscape:collect="always" r="34.345188"
xlink:href="#linearGradient3144"
id="radialGradient4852-6"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736" fy="672.79736"
r="34.345188" /> fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6-1"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-9-6-1-1"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -278,17 +278,17 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="15.078125" inkscape:zoom="7.6088565"
inkscape:cx="31.933679" inkscape:cx="33.444373"
inkscape:cy="23.941969" inkscape:cy="30.440063"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:grid-bbox="true" inkscape:grid-bbox="true"
inkscape:window-width="1920" inkscape:window-width="1366"
inkscape:window-height="1161" inkscape:window-height="702"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="0" inkscape:window-y="27"
inkscape:window-maximized="1" /> inkscape:window-maximized="1" />
<metadata <metadata
id="metadata2923"> id="metadata2923">
@ -298,7 +298,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -347,7 +347,7 @@
inkscape:export-xdpi="7.2934141" inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141" /> inkscape:export-ydpi="7.2934141" />
<path <path
style="display:inline;overflow:visible;visibility:visible;fill:#0079ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.84700072;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" style="display:inline;overflow:visible;visibility:visible;fill:#ffa100;fill-opacity:1;fill-rule:nonzero;stroke:#665123;stroke-width:0.84700072;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 58.555579,11.316021 22.307841,5.7938518 4.8450848,37.848895 40.042117,59.66807 41.293589,54.194078 11.233991,36.399782 24.986028,10.157803 57.773488,15.36902 Z" d="M 58.555579,11.316021 22.307841,5.7938518 4.8450848,37.848895 40.042117,59.66807 41.293589,54.194078 11.233991,36.399782 24.986028,10.157803 57.773488,15.36902 Z"
id="path4425-9" id="path4425-9"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
@ -359,88 +359,132 @@
inkscape:export-xdpi="7.2934141" inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141" /> inkscape:export-ydpi="7.2934141" />
<g <g
id="g3185" id="g5734-5"
transform="matrix(-0.14592237,0.00572413,-0.00572413,-0.14592237,40.882773,131.25331)" transform="translate(-14.861945,44.831094)">
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141">
<circle <circle
id="path3187" transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
style="display:inline;overflow:visible;visibility:visible;fill:#fcaf3e;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.79999971;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="path3187-6-5-7-2-9-9"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7"
cx="197.14285" cx="197.14285"
cy="655.2193" cy="655.2193"
r="48.57143" /> r="48.57143" />
<ellipse <ellipse
style="fill:url(#radialGradient3264-9);fill-opacity:1;stroke:none"
id="path3134-2-9-0"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
id="path3189"
style="fill:url(#radialGradient4852);fill-opacity:1;stroke:none"
cx="225.26402" cx="225.26402"
cy="672.79736" cy="672.79736"
rx="34.345188" rx="34.345188"
ry="23.991123" /> ry="23.991123" />
</g> </g>
</g>
<g <g
id="g3185-6" id="g5734-5-3"
transform="matrix(-0.14592237,0.00572413,-0.00572413,-0.14592237,91.042198,108.25459)" transform="translate(-44.827027,25.163146)">
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141">
<circle <circle
id="path3187-2" transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
style="display:inline;overflow:visible;visibility:visible;fill:#fcaf3e;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.79999971;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="path3187-6-5-7-2-9-9-7"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4"
cx="197.14285" cx="197.14285"
cy="655.2193" cy="655.2193"
r="48.57143" /> r="48.57143" />
<ellipse <ellipse
style="fill:url(#radialGradient3264-9-6);fill-opacity:1;stroke:none"
id="path3134-2-9-0-4"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
id="path3189-5"
style="fill:url(#radialGradient4889);fill-opacity:1;stroke:none"
cx="225.26402" cx="225.26402"
cy="672.79736" cy="672.79736"
rx="34.345188" rx="34.345188"
ry="23.991123" /> ry="23.991123" />
</g> </g>
</g>
<g <g
id="g3185-66" id="g5734-5-3-5"
transform="matrix(-0.14592237,0.00572413,-0.00572413,-0.14592237,73.763959,150.60875)" transform="translate(-30.895892,-3.6191024)">
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141">
<circle <circle
id="path3187-5" transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
style="display:inline;overflow:visible;visibility:visible;fill:#fcaf3e;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.79999971;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="path3187-6-5-7-2-9-9-7-8"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9-6">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4-7"
cx="197.14285" cx="197.14285"
cy="655.2193" cy="655.2193"
r="48.57143" /> r="48.57143" />
<ellipse <ellipse
style="fill:url(#radialGradient3264-9-6-1);fill-opacity:1;stroke:none"
id="path3134-2-9-0-4-8"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
id="path3189-0"
style="fill:url(#radialGradient4929);fill-opacity:1;stroke:none"
cx="225.26402" cx="225.26402"
cy="672.79736" cy="672.79736"
rx="34.345188" rx="34.345188"
ry="23.991123" /> ry="23.991123" />
</g> </g>
</g>
<g <g
id="g3185-7" id="g5734-5-3-5-2"
transform="matrix(-0.14592237,0.00572413,-0.00572413,-0.14592237,55.133656,102.30859)" transform="translate(3.2748139,0.19224543)">
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
inkscape:export-xdpi="7.2934141"
inkscape:export-ydpi="7.2934141">
<circle <circle
r="48.57143" transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
cy="655.2193" id="path3187-6-5-7-2-9-9-7-8-5"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261"
cy="-16.205133"
r="7.0931091" />
<g
inkscape:export-ydpi="7.0721951"
inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3-9-9-6-0">
<circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0-7-4-7-5"
cx="197.14285" cx="197.14285"
id="path3187-0" cy="655.2193"
style="display:inline;overflow:visible;visibility:visible;fill:#fcaf3e;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.79999971;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /> r="48.57143" />
<ellipse <ellipse
ry="23.991123" style="fill:url(#radialGradient3264-9-6-1-1);fill-opacity:1;stroke:none"
rx="34.345188" id="path3134-2-9-0-4-8-5"
cy="672.79736"
cx="225.26402"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
id="path3189-1" cx="225.26402"
style="fill:url(#radialGradient4852-6);fill-opacity:1;stroke:none" /> cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -992,17 +992,6 @@
id="radialGradient4570" id="radialGradient4570"
xlink:href="#linearGradient3362" xlink:href="#linearGradient3362"
inkscape:collect="always" /> inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<radialGradient <radialGradient
r="34.345188" r="34.345188"
fy="672.79736" fy="672.79736"
@ -1047,6 +1036,72 @@
id="radialGradient3264-4" id="radialGradient3264-4"
xlink:href="#linearGradient3144" xlink:href="#linearGradient3144"
inkscape:collect="always" /> inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient5582"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient5582-5"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient5582-5-8"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient5582-5-8-7"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient5582-5-8-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient3264-7-3"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
@ -1056,8 +1111,8 @@
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="7.90625" inkscape:zoom="7.90625"
inkscape:cx="32" inkscape:cx="32.252964"
inkscape:cy="32" inkscape:cy="31.810277"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
inkscape:document-units="px" inkscape:document-units="px"
@ -1075,7 +1130,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -1084,11 +1139,11 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer"> inkscape:groupmode="layer">
<g <g
id="g5734" id="g5734-1-7"
transform="translate(-29.640304,1.0762083)"> transform="translate(-22.785725,1.8475032)">
<circle <circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)" transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9" id="path3187-6-5-7-2-9-3-6"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-54.289261" cx="-54.289261"
cy="-16.205133" cy="-16.205133"
@ -1098,16 +1153,16 @@
inkscape:export-xdpi="7.0721951" inkscape:export-xdpi="7.0721951"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png" inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)" transform="matrix(-0.14037891,0.00375861,-0.00375861,-0.14037891,83.443368,103.46311)"
id="g3154-5-3"> id="g3154-5-3-4-1">
<circle <circle
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2162-1-0" id="path2162-1-0-4-1"
cx="197.14285" cx="197.14285"
cy="655.2193" cy="655.2193"
r="48.57143" /> r="48.57143" />
<ellipse <ellipse
style="fill:url(#radialGradient3264);fill-opacity:1;stroke:none" style="fill:url(#radialGradient3264-7-3);fill-opacity:1;stroke:none"
id="path3134-2-9" id="path3134-2-9-3-1"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)" transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
cx="225.26402" cx="225.26402"
cy="672.79736" cy="672.79736"
@ -1243,5 +1298,159 @@
ry="23.991123" /> ry="23.991123" />
</g> </g>
</g> </g>
<g
id="g4325">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-30.710905"
cy="-15.977517"
r="7.0931091" />
<g
id="g5578"
transform="matrix(0.62053126,0,0,1.1370902,41.575125,0.83996784)"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:#ff2600;fill-opacity:1;fill-rule:nonzero;stroke:#731200;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none">
<circle
r="18.571428"
transform="matrix(0.58699307,0,0,0.32171623,-48.705235,0.37476683)"
cy="34.571426"
cx="53.214287"
id="path3696-4"
style="display:inline;overflow:visible;visibility:visible;fill:#ffbf00;fill-opacity:1;fill-rule:evenodd;stroke:#7b5600;stroke-width:1.79201269;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="23.991123"
rx="34.345188"
cy="672.79736"
cx="225.26402"
transform="matrix(-0.16409395,0.06015817,-0.11023662,-0.08954912,91.030266,56.104458)"
id="path3189"
style="fill:url(#radialGradient5582);fill-opacity:1;stroke:none" />
</g>
</g>
<g
transform="translate(11.219611,11.985285)"
id="g4325-4">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-1"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-30.710905"
cy="-15.977517"
r="7.0931091" />
<g
id="g5578-3"
transform="matrix(0.62053126,0,0,1.1370902,41.575125,0.83996784)"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:#ff2600;fill-opacity:1;fill-rule:nonzero;stroke:#731200;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none">
<circle
r="18.571428"
transform="matrix(0.58699307,0,0,0.32171623,-48.705235,0.37476683)"
cy="34.571426"
cx="53.214287"
id="path3696-4-2"
style="display:inline;overflow:visible;visibility:visible;fill:#ffbf00;fill-opacity:1;fill-rule:evenodd;stroke:#7b5600;stroke-width:1.79201269;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="23.991123"
rx="34.345188"
cy="672.79736"
cx="225.26402"
transform="matrix(-0.16409395,0.06015817,-0.11023662,-0.08954912,91.030266,56.104458)"
id="path3189-7"
style="fill:url(#radialGradient5582-5);fill-opacity:1;stroke:none" />
</g>
</g>
<g
transform="translate(-21.918729,22.736275)"
id="g4325-4-0">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-1-2"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-30.710905"
cy="-15.977517"
r="7.0931091" />
<g
id="g5578-3-9"
transform="matrix(0.62053126,0,0,1.1370902,41.575125,0.83996784)"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:#ff2600;fill-opacity:1;fill-rule:nonzero;stroke:#731200;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none">
<circle
r="18.571428"
transform="matrix(0.58699307,0,0,0.32171623,-48.705235,0.37476683)"
cy="34.571426"
cx="53.214287"
id="path3696-4-2-5"
style="display:inline;overflow:visible;visibility:visible;fill:#ffbf00;fill-opacity:1;fill-rule:evenodd;stroke:#7b5600;stroke-width:1.79201269;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="23.991123"
rx="34.345188"
cy="672.79736"
cx="225.26402"
transform="matrix(-0.16409395,0.06015817,-0.11023662,-0.08954912,91.030266,56.104458)"
id="path3189-7-8"
style="fill:url(#radialGradient5582-5-8);fill-opacity:1;stroke:none" />
</g>
</g>
<g
transform="translate(-7.1203101,35.258013)"
id="g4325-4-0-3">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-1-2-1"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-30.710905"
cy="-15.977517"
r="7.0931091" />
<g
id="g5578-3-9-8"
transform="matrix(0.62053126,0,0,1.1370902,41.575125,0.83996784)"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:#ff2600;fill-opacity:1;fill-rule:nonzero;stroke:#731200;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none">
<circle
r="18.571428"
transform="matrix(0.58699307,0,0,0.32171623,-48.705235,0.37476683)"
cy="34.571426"
cx="53.214287"
id="path3696-4-2-5-4"
style="display:inline;overflow:visible;visibility:visible;fill:#ffbf00;fill-opacity:1;fill-rule:evenodd;stroke:#7b5600;stroke-width:1.79201269;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="23.991123"
rx="34.345188"
cy="672.79736"
cx="225.26402"
transform="matrix(-0.16409395,0.06015817,-0.11023662,-0.08954912,91.030266,56.104458)"
id="path3189-7-8-2"
style="fill:url(#radialGradient5582-5-8-7);fill-opacity:1;stroke:none" />
</g>
</g>
<g
transform="translate(-22.045211,40.317302)"
id="g4325-4-0-6">
<circle
transform="matrix(-0.9992315,0.03919708,-0.03919708,-0.9992315,0,0)"
id="path3187-6-5-7-2-9-1-2-4"
style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:0.58431373;fill-rule:nonzero;stroke:none;stroke-width:5.79999971;marker:none;enable-background:accumulate"
cx="-30.710905"
cy="-15.977517"
r="7.0931091" />
<g
id="g5578-3-9-9"
transform="matrix(0.62053126,0,0,1.1370902,41.575125,0.83996784)"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:#ff2600;fill-opacity:1;fill-rule:nonzero;stroke:#731200;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none">
<circle
r="18.571428"
transform="matrix(0.58699307,0,0,0.32171623,-48.705235,0.37476683)"
cy="34.571426"
cx="53.214287"
id="path3696-4-2-5-6"
style="display:inline;overflow:visible;visibility:visible;fill:#ffbf00;fill-opacity:1;fill-rule:evenodd;stroke:#7b5600;stroke-width:1.79201269;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<ellipse
ry="23.991123"
rx="34.345188"
cy="672.79736"
cx="225.26402"
transform="matrix(-0.16409395,0.06015817,-0.11023662,-0.08954912,91.030266,56.104458)"
id="path3189-7-8-9"
style="fill:url(#radialGradient5582-5-8-1);fill-opacity:1;stroke:none" />
</g>
</g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -0,0 +1,812 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64px"
height="64px"
id="svg2816"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="WF_projectedPoint.svg"
sodipodi:version="0.32"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/yorik/PartDesign_Pocket.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs2818">
<linearGradient
id="linearGradient3669">
<stop
style="stop-color:#001ccc;stop-opacity:1;"
offset="0"
id="stop3671" />
<stop
style="stop-color:#00afff;stop-opacity:1;"
offset="1"
id="stop3673" />
</linearGradient>
<linearGradient
id="linearGradient3602">
<stop
style="stop-color:#ff2600;stop-opacity:1;"
offset="0"
id="stop3604" />
<stop
style="stop-color:#ff5f00;stop-opacity:1;"
offset="1"
id="stop3606" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 32 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="64 : 32 : 1"
inkscape:persp3d-origin="32 : 21.333333 : 1"
id="perspective2824" />
<inkscape:perspective
id="perspective3618"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3602-7"
id="linearGradient3608-5"
x1="3.909091"
y1="14.363636"
x2="24.81818"
y2="14.363636"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3602-7">
<stop
style="stop-color:#c51900;stop-opacity:1;"
offset="0"
id="stop3604-1" />
<stop
style="stop-color:#ff5f00;stop-opacity:1;"
offset="1"
id="stop3606-3" />
</linearGradient>
<inkscape:perspective
id="perspective3677"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3602-5"
id="linearGradient3608-1"
x1="3.909091"
y1="14.363636"
x2="24.81818"
y2="14.363636"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3602-5">
<stop
style="stop-color:#c51900;stop-opacity:1;"
offset="0"
id="stop3604-9" />
<stop
style="stop-color:#ff5f00;stop-opacity:1;"
offset="1"
id="stop3606-9" />
</linearGradient>
<linearGradient
y2="14.363636"
x2="24.81818"
y1="14.363636"
x1="3.909091"
gradientUnits="userSpaceOnUse"
id="linearGradient3686"
xlink:href="#linearGradient3602-5"
inkscape:collect="always" />
<inkscape:perspective
id="perspective3717"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3602-58"
id="linearGradient3608-8"
x1="3.909091"
y1="14.363636"
x2="24.81818"
y2="14.363636"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3602-58">
<stop
style="stop-color:#d82b1e;stop-opacity:1;"
offset="0"
id="stop3604-2" />
<stop
style="stop-color:#840000;stop-opacity:1;"
offset="1"
id="stop3606-2" />
</linearGradient>
<linearGradient
y2="14.363636"
x2="24.81818"
y1="14.363636"
x1="3.909091"
gradientUnits="userSpaceOnUse"
id="linearGradient3726"
xlink:href="#linearGradient3602-58"
inkscape:collect="always" />
<inkscape:perspective
id="perspective4410"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective4944"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective4966"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective5009"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective5165"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7581"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7606"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7638"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7660"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7704"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7730"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7762"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7783"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7843"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7881"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective7932"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2866"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2878"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
id="linearGradient3602-1">
<stop
style="stop-color:#ff2600;stop-opacity:1;"
offset="0"
id="stop3604-8" />
<stop
style="stop-color:#ff5f00;stop-opacity:1;"
offset="1"
id="stop3606-96" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3602-1"
id="linearGradient2875"
gradientUnits="userSpaceOnUse"
x1="3.909091"
y1="14.363636"
x2="24.81818"
y2="14.363636" />
<inkscape:perspective
id="perspective2885"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
id="linearGradient3602-1-5">
<stop
style="stop-color:#ff2600;stop-opacity:1;"
offset="0"
id="stop3604-8-3" />
<stop
style="stop-color:#ff5f00;stop-opacity:1;"
offset="1"
id="stop3606-96-8" />
</linearGradient>
<inkscape:perspective
id="perspective3720"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
id="linearGradient3602-1-8">
<stop
style="stop-color:#ff2600;stop-opacity:1;"
offset="0"
id="stop3604-8-5" />
<stop
style="stop-color:#ff5f00;stop-opacity:1;"
offset="1"
id="stop3606-96-2" />
</linearGradient>
<inkscape:perspective
id="perspective3822"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3849"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3879"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2896"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2925"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2925-4"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3726"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3669"
id="linearGradient3675"
x1="81.451569"
y1="14.993487"
x2="3.0457773"
y2="17.729464"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.073092,0,0,1.5149249,-3.4880263,-14.297954)" />
<inkscape:perspective
id="perspective3689"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
id="linearGradient3669-2">
<stop
style="stop-color:#af7d00;stop-opacity:1;"
offset="0"
id="stop3671-7" />
<stop
style="stop-color:#ffed00;stop-opacity:1;"
offset="1"
id="stop3673-5" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0.73872768,0,0,1.3536788,-2.25,-1.9999999)"
y2="1.8468192"
x2="48.259949"
y1="33.61211"
x1="34.290413"
gradientUnits="userSpaceOnUse"
id="linearGradient3698"
xlink:href="#linearGradient3669-2"
inkscape:collect="always" />
<inkscape:perspective
id="perspective3689-6"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3669-22"
id="linearGradient3675-0"
x1="34.290413"
y1="33.61211"
x2="73.185463"
y2="31.368526"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3536788,0,0,0.7441538,0,1.1950203)" />
<linearGradient
id="linearGradient3669-22">
<stop
style="stop-color:#af7d00;stop-opacity:1;"
offset="0"
id="stop3671-8" />
<stop
style="stop-color:#ffed00;stop-opacity:1;"
offset="1"
id="stop3673-4" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0.73872768,0,0,1.3536788,-2.25,-1.9999999)"
y2="1.8468192"
x2="48.259949"
y1="33.61211"
x1="34.290413"
gradientUnits="userSpaceOnUse"
id="linearGradient3698-3"
xlink:href="#linearGradient3669-22"
inkscape:collect="always" />
<inkscape:perspective
id="perspective3689-1"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
id="linearGradient3669-0">
<stop
style="stop-color:#af7d00;stop-opacity:1;"
offset="0"
id="stop3671-9" />
<stop
style="stop-color:#ffed00;stop-opacity:1;"
offset="1"
id="stop3673-1" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0.73872768,0,0,1.3536788,-2.25,-1.9999999)"
y2="1.8468192"
x2="48.259949"
y1="33.61211"
x1="34.290413"
gradientUnits="userSpaceOnUse"
id="linearGradient3698-9"
xlink:href="#linearGradient3669-0"
inkscape:collect="always" />
<radialGradient
r="34.345188"
fy="672.79736"
fx="225.26402"
cy="672.79736"
cx="225.26402"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
gradientUnits="userSpaceOnUse"
id="radialGradient4577"
xlink:href="#linearGradient3144"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
id="linearGradient3144">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3146" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3148" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient5582"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4135"
id="linearGradient4145"
x1="131.82286"
y1="101.22672"
x2="191.3165"
y2="101.22672"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient4135">
<stop
style="stop-color:#0079ff;stop-opacity:1;"
offset="0"
id="stop4137" />
<stop
style="stop-color:#0079ff;stop-opacity:0;"
offset="1"
id="stop4139" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4135"
id="linearGradient5652"
gradientUnits="userSpaceOnUse"
x1="131.82286"
y1="101.22672"
x2="191.3165"
y2="101.22672" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4135-0"
id="linearGradient5674-5"
gradientUnits="userSpaceOnUse"
x1="131.82286"
y1="101.22672"
x2="191.3165"
y2="101.22672" />
<linearGradient
inkscape:collect="always"
id="linearGradient4135-0">
<stop
style="stop-color:#0079ff;stop-opacity:1;"
offset="0"
id="stop4137-2" />
<stop
style="stop-color:#0079ff;stop-opacity:0;"
offset="1"
id="stop4139-4" />
</linearGradient>
<linearGradient
gradientTransform="matrix(0.73872768,0,0,1.3536788,-18.440975,-32.313429)"
y2="37.183754"
x2="13.421829"
y1="32.874828"
x1="98.042648"
gradientUnits="userSpaceOnUse"
id="linearGradient4017"
xlink:href="#linearGradient3669"
inkscape:collect="always" />
<linearGradient
gradientTransform="matrix(0.73872768,0,0,1.3536788,24.703726,-43.061219)"
y2="37.183754"
x2="13.421829"
y1="32.874828"
x1="98.042648"
gradientUnits="userSpaceOnUse"
id="linearGradient4017-6"
xlink:href="#linearGradient3669"
inkscape:collect="always" />
<linearGradient
gradientTransform="matrix(0.73872768,0,0,1.3536788,-9.0750444,3.6148984)"
y2="37.183754"
x2="13.421829"
y1="32.874828"
x1="98.042648"
gradientUnits="userSpaceOnUse"
id="linearGradient4017-6-0"
xlink:href="#linearGradient3669"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient4272"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient5582-8"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3144"
id="radialGradient5582-3"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
cx="225.26402"
cy="672.79736"
fx="225.26402"
fy="672.79736"
r="34.345188" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="6.5129668"
inkscape:cx="24.879924"
inkscape:cy="16.944636"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:document-units="px"
inkscape:grid-bbox="true"
inkscape:window-width="1265"
inkscape:window-height="1087"
inkscape:window-x="529"
inkscape:window-y="24"
inkscape:window-maximized="0" />
<metadata
id="metadata2821">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Layer2">
<g
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:url(#linearGradient5674-5);fill-opacity:1;fill-rule:nonzero;stroke:#001833;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
transform="matrix(-0.03563458,0.35738558,-0.38486089,-0.0404254,80.653631,175.31488)"
id="g3618-3">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect3520-1"
d="M 131.8509,176.39728 244.39428,74.003665 c 5.58489,-0.0245 7.4488,3.170189 5.85178,5.863995 L 138.73758,182.21743 Z"
style="display:inline;overflow:visible;visibility:visible;fill:#0079f0;fill-opacity:1;fill-rule:evenodd;stroke:#001833;stroke-width:1.76347613;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.74117647;marker:none;enable-background:accumulate" />
</g>
</g>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path2887-1-6-3"
d="M 33.449727,30.22585 1.5459003,49.073509 -3.3559227,16.669194 33.372795,-0.60715256 Z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;opacity:0.40700001;fill:url(#linearGradient4017);fill-opacity:1;fill-rule:nonzero;stroke:#00064a;stroke-width:1.80387402;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path2887-1-6-3-4"
d="M 71.066992,45.733376 33.328651,30.495186 33.340104,-0.83434929 76.517495,-11.354943 Z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;opacity:0.40700001;fill:url(#linearGradient4017-6);fill-opacity:1;fill-rule:nonzero;stroke:#00064a;stroke-width:1.80387402;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="path2887-1-6-3-4-4"
d="M 70.913452,46.193995 10.911832,85.001836 1.4038126,49.373184 33.372794,29.947279 Z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;opacity:0.40700001;fill:url(#linearGradient4017-6-0);fill-opacity:1;fill-rule:nonzero;stroke:#00064a;stroke-width:1.80387402;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Layer0">
<g
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:#ff2600;fill-opacity:1;fill-rule:nonzero;stroke:#731200;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
transform="matrix(0.51710938,0,0,0.94757516,48.15418,44.93522)"
id="g5578">
<circle
style="display:inline;overflow:visible;visibility:visible;fill:#ffbf00;fill-opacity:1;fill-rule:evenodd;stroke:#7b5600;stroke-width:1.79201269;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path3696-4"
cx="53.214287"
cy="34.571426"
transform="matrix(0.58699307,0,0,0.32171623,-48.705235,0.37476683)"
r="18.571428" />
<ellipse
style="fill:url(#radialGradient5582);fill-opacity:1;stroke:none"
id="path3189"
transform="matrix(-0.16409395,0.06015817,-0.11023662,-0.08954912,91.030266,56.104458)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
<g
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:#ff2600;fill-opacity:1;fill-rule:nonzero;stroke:#731200;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
transform="matrix(0.51710938,0,0,0.94757516,62.77224,7.3508928)"
id="g5578-8">
<circle
style="display:inline;overflow:visible;visibility:visible;fill:#ffbf00;fill-opacity:1;fill-rule:evenodd;stroke:#7b5600;stroke-width:1.79201269;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path3696-4-4"
transform="matrix(0.58699307,0,0,0.32171623,-48.705235,0.37476683)"
cx="53.214287"
cy="34.571426"
r="18.571428" />
<ellipse
style="fill:url(#radialGradient5582-8);fill-opacity:1;stroke:none"
id="path3189-5"
transform="matrix(-0.16409395,0.06015817,-0.11023662,-0.08954912,91.030266,56.104458)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
<g
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;visibility:visible;fill:#ff2600;fill-opacity:1;fill-rule:nonzero;stroke:#731200;stroke-width:2.19132471;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
transform="matrix(0.51710938,0,0,0.94757516,28.532852,9.1933705)"
id="g5578-7">
<circle
style="display:inline;overflow:visible;visibility:visible;fill:#ffbf00;fill-opacity:1;fill-rule:evenodd;stroke:#7b5600;stroke-width:1.79201269;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path3696-4-9"
transform="matrix(0.58699307,0,0,0.32171623,-48.705235,0.37476683)"
cx="53.214287"
cy="34.571426"
r="18.571428" />
<ellipse
style="fill:url(#radialGradient5582-3);fill-opacity:1;stroke:none"
id="path3189-1"
transform="matrix(-0.16409395,0.06015817,-0.11023662,-0.08954912,91.030266,56.104458)"
cx="225.26402"
cy="672.79736"
rx="34.345188"
ry="23.991123" />
</g>
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="czcc"
id="path3677"
d="m 20.668102,20.76976 c 0,0 2.148341,1.291598 8.217222,5.054803 6.068883,3.763206 9.162169,5.84513 9.162169,5.84513 l 0.141781,0.368467"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00064a;stroke-width:2.09090662;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.09090676, 2.09090676;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="czcc"
id="path3677-9"
d="m 52.774423,18.999455 c 0,0 -2.103735,1.473655 -8.046604,5.767307 -5.942869,4.293652 -8.971927,6.669033 -8.971927,6.669033 L 35.617055,31.8562"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00064a;stroke-width:2.21010447;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.21010455, 2.21010455;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscc"
id="path3677-2"
d="m 38.311172,31.541361 c 0,0 0.151371,-6.691865 0.233149,0.448607 l 0.256857,22.427434 -0.01176,0.368467"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:54.21519089px;font-family:Arial;-inkscape-font-specification:Arial;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#00064a;stroke-width:2.09090662;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.09090676, 2.09090676;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
<g
id="g3154"
transform="matrix(-0.16207011,0.00433939,-0.00433939,-0.16207011,73.02564,136.01783)"
inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/line.png"
inkscape:export-xdpi="7.0721951"
inkscape:export-ydpi="7.0721951">
<circle
r="48.57143"
cy="655.2193"
cx="197.14285"
id="path2162"
style="fill:#0079ff;fill-opacity:1;stroke:#001833;stroke-width:5.80000019;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<ellipse
ry="23.991123"
rx="34.345188"
cy="672.79736"
cx="225.26402"
transform="matrix(0.8513023,-0.5246754,0.5246754,0.8513023,-338.69692,214.19328)"
id="path3134"
style="fill:url(#radialGradient4272);fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -45,8 +45,8 @@ global myTabName
myTabName = "Parametric Curves" myTabName = "Parametric Curves"
global myObjName global myObjName
myObjName = "ParametricCurves" myObjName = "ParametricCurves"
global myRelease global ParametricRelease
myRelease = "2016_11" ParametricRelease = "2017_01"
global f2 global f2
def f2(fa,fb,fx,fy,t,i): def f2(fa,fb,fx,fy,t,i):
pass pass
@ -788,13 +788,15 @@ class ParametricCurve2D(Parametric):
#msgBox = QtGui.QMessageBox() #msgBox = QtGui.QMessageBox()
import numpy as np import numpy as np
t=0.
fa = str(self.la.text()) fa = str(self.la.text())
fb = str(self.lb.text()) fb = str(self.lb.text())
t=0.
a=eval(fa) a=eval(fa)
b=eval(fb) b=eval(fb)
def iterate():
if hasattr(a, '__iter__') and hasattr(b, '__iter__'): if hasattr(a, '__iter__') and hasattr(b, '__iter__'):
for m_a in a: for m_a in a:
for m_b in b: for m_b in b:
@ -820,6 +822,21 @@ class ParametricCurve2D(Parametric):
print "b=" + str(b) print "b=" + str(b)
self.draw_par_function(a, b) self.draw_par_function(a, b)
oxs = eval(str(self.x_ref.text()))
oys = eval(str(self.y_ref.text()))
ozs = eval(str(self.z_ref.text()))
if hasattr(oxs, '__iter__'):
for m_ox, m_oy, m_oz in zip(oxs, oys, ozs):
self.ox = float(m_ox)
self.oy = float(m_oy)
self.oz = float(m_oz)
iterate()
else:
self.ox = float(eval(str(self.x_ref.text())))
self.oy = float(eval(str(self.y_ref.text())))
self.oz = float(eval(str(self.z_ref.text())))
iterate()
def draw_par_function(self,fa ,fb): def draw_par_function(self,fa ,fb):
if self.debug != 0: if self.debug != 0:
@ -832,9 +849,7 @@ class ParametricCurve2D(Parametric):
intt = float(eval(str(self.ltstep.text()))) intt = float(eval(str(self.ltstep.text())))
#fz = float(eval(str(self.lz.text()))) #fz = float(eval(str(self.lz.text())))
ox = float(eval(str(self.x_ref.text()))) ox, oy, oz = self.ox, self.oy, self.oz
oy = float(eval(str(self.y_ref.text())))
oz = float(eval(str(self.z_ref.text())))
d = (tf + intt -t)/intt d = (tf + intt -t)/intt
dmax = int(d) dmax = int(d)
@ -848,9 +863,9 @@ class ParametricCurve2D(Parametric):
print "x=" + str(fx) print "x=" + str(fx)
print "y=" + str(fy) print "y=" + str(fy)
print "Ref Point :" print "Ref Point :"
print "ox=" + str(ox) print "x_ref=" + str(ox)
print "oy=" + str(oy) print "y_ref=" + str(oy)
print "oz=" + str(oz) print "z_ref=" + str(oz)
code = """ code = """
def f2(fa,fb,fx,fy,t,i,msgBox): def f2(fa,fb,fx,fy,t,i,msgBox):
@ -1261,6 +1276,7 @@ class ParametricCurve3D(Parametric):
print "x=" + str(fx) print "x=" + str(fx)
print "y=" + str(fy) print "y=" + str(fy)
print "z=" + str(fz) print "z=" + str(fz)
print "Ref Point :"
print "x_ref=" + str(ox) print "x_ref=" + str(ox)
print "y_ref=" + str(oy) print "y_ref=" + str(oy)
print "z_ref=" + str(oz) print "z_ref=" + str(oz)
@ -1960,6 +1976,8 @@ class SurfaceEvents(DefineAndConnectEvents):
} }
self.connections_for_return_pressed = {} self.connections_for_return_pressed = {}
########################################## ##########################################
class RegressionCurve2DEvents(DefineAndConnectEvents): class RegressionCurve2DEvents(DefineAndConnectEvents):
def __init__(self,ui): def __init__(self,ui):
@ -2110,6 +2128,16 @@ class ParametricTab():
self.ui.setupUi(self.m_dialog) self.ui.setupUi(self.m_dialog)
self.m_tab.setCurrentIndex(3) self.m_tab.setCurrentIndex(3)
#----------------------------------------------------------------
self.connections_for_button_clicked = {
"button_quit" : "quit_clicked",
}
for m_key, m_val in self.connections_for_button_clicked.items():
print_msg( "Connecting : " + str(m_key) + " and " + str(m_val) )
QtCore.QObject.connect(getattr(self.ui, str(m_key)),
QtCore.SIGNAL("clicked()"),getattr(self,str(m_val)))
# Create a Regression 2D Curve object and connect # Create a Regression 2D Curve object and connect
self.reg_events2D = RegressionCurve2DEvents(self.ui) self.reg_events2D = RegressionCurve2DEvents(self.ui)
# Create a Parametric 2D Curve object and connect # Create a Parametric 2D Curve object and connect
@ -2119,6 +2147,11 @@ class ParametricTab():
# Create a Surface object and connect # Create a Surface object and connect
self.surface = SurfaceEvents(self.ui) self.surface = SurfaceEvents(self.ui)
m_text=str(ParametricRelease)
self.ui.label_release.setText(QtGui.QApplication.translate("Form", m_text, None, QtGui.QApplication.UnicodeUTF8))
#----------------------------------------------------------------
if self.movable: if self.movable:
t=FreeCADGui.getMainWindow() t=FreeCADGui.getMainWindow()
wf = t.findChild(QtGui.QDockWidget, str(self.objname)) wf = t.findChild(QtGui.QDockWidget, str(self.objname))
@ -2131,10 +2164,14 @@ class ParametricTab():
wf.activateWindow() wf.activateWindow()
wf.raise_() wf.raise_()
QtCore.QObject.connect(self.ui.button_quit, QtCore.SIGNAL ('clicked()'), self.quit_clicked)
def quit_clicked(self): # quit def quit_clicked(self): # quit
print_msg( "quit_clicked !")
if self.movable: if self.movable:
self.dw.close() self.dw.close()
self.close()
print_msg( "Close done !") print_msg( "Close done !")
return return
else: else:

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>396</width> <width>396</width>
<height>610</height> <height>701</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -17,7 +17,7 @@
<iconset> <iconset>
<normaloff>../Icons/WF_wf.svg</normaloff>../Icons/WF_wf.svg</iconset> <normaloff>../Icons/WF_wf.svg</normaloff>../Icons/WF_wf.svg</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout_34"> <layout class="QGridLayout" name="gridLayout_13">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QScrollArea" name="scrollArea"> <widget class="QScrollArea" name="scrollArea">
<property name="frameShape"> <property name="frameShape">
@ -40,8 +40,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>365</width> <width>376</width>
<height>593</height> <height>642</height>
</rect> </rect>
</property> </property>
<layout class="QGridLayout" name="gridLayout_128"> <layout class="QGridLayout" name="gridLayout_128">
@ -225,7 +225,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="Point_Tab1_3"> <widget class="QWidget" name="Point_Tab1_3">
<attribute name="title"> <attribute name="title">
@ -511,6 +511,95 @@ Be aware that if the plane is not extended enough the intersection Point is stil
</widget> </widget>
</item> </item>
<item row="8" column="0"> <item row="8" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_59">
<item>
<widget class="QPushButton" name="button_points_projection">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Create projected point(s) on the choosen main planes.&lt;/p&gt;&lt;p&gt;- Select one (or several) Point(s) and/or one (or several) Axis.&lt;/p&gt;&lt;p&gt;Define the projection plane if needed.&lt;/p&gt;&lt;p&gt;It can be either&lt;/p&gt;&lt;p&gt;XY plane,&lt;/p&gt;&lt;p&gt;YZ plane,&lt;/p&gt;&lt;p&gt;XZ plane or&lt;/p&gt;&lt;p&gt;All 3 planes&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Projected Points</string>
</property>
<property name="icon">
<iconset>
<normaloff>../Icons/WF_projectedPoint.svg</normaloff>../Icons/WF_projectedPoint.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="point_proj_comboBox">
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The projection plane(s)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>All</string>
</property>
</item>
<item>
<property name="text">
<string>XY plane</string>
</property>
</item>
<item>
<property name="text">
<string>YZ plane</string>
</property>
</item>
<item>
<property name="text">
<string>XZ plane</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="9" column="0">
<spacer name="verticalSpacer_19">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>252</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="Point_Tab2_3">
<attribute name="title">
<string>Point 2/3</string>
</attribute>
<attribute name="toolTip">
<string>Create Point(s)</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QPushButton" name="button_point_line_point"> <widget class="QPushButton" name="button_point_line_point">
<property name="toolTip"> <property name="toolTip">
<string>Point(s)=(Point(s),Line(s)): <string>Point(s)=(Point(s),Line(s)):
@ -545,30 +634,7 @@ Be aware that if the plane is not extended enough the intersection Point is stil
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="0"> <item row="1" column="0">
<spacer name="verticalSpacer_19">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>252</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="Point_Tab2_3">
<attribute name="title">
<string>Point 2/3</string>
</attribute>
<attribute name="toolTip">
<string>Create Point(s)</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_13">
<item row="0" column="0">
<widget class="QPushButton" name="button_twolines_point"> <widget class="QPushButton" name="button_twolines_point">
<property name="toolTip"> <property name="toolTip">
<string>Point(s)=(Line(s),Line(s)): <string>Point(s)=(Line(s),Line(s)):
@ -598,7 +664,7 @@ The Vector AB perpendicular to the first and second Line.
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_47"> <layout class="QHBoxLayout" name="horizontalLayout_47">
<property name="sizeConstraint"> <property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum> <enum>QLayout::SetFixedSize</enum>
@ -666,7 +732,7 @@ respecting to the choosen reference starting point.</string>
</item> </item>
</layout> </layout>
</item> </item>
<item row="2" column="0"> <item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_48"> <layout class="QHBoxLayout" name="horizontalLayout_48">
<item> <item>
<widget class="QPushButton" name="button_distPoint"> <widget class="QPushButton" name="button_distPoint">
@ -767,7 +833,7 @@ Can be negative for the reverse direction!</string>
</item> </item>
</layout> </layout>
</item> </item>
<item row="3" column="0"> <item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_49"> <layout class="QHBoxLayout" name="horizontalLayout_49">
<item> <item>
<widget class="QPushButton" name="button_cut_wire_point"> <widget class="QPushButton" name="button_cut_wire_point">
@ -833,7 +899,7 @@ An object must also be seleted but before any Wire to cut all his edges! </strin
</item> </item>
</layout> </layout>
</item> </item>
<item row="4" column="0"> <item row="5" column="0">
<widget class="QRadioButton" name="button_click_for_point"> <widget class="QRadioButton" name="button_click_for_point">
<property name="toolTip"> <property name="toolTip">
<string>Create a set of Points on a Plane perpendicular to the view at location of mouse clicks. <string>Create a set of Points on a Plane perpendicular to the view at location of mouse clicks.
@ -862,7 +928,7 @@ MB2 and MB3 can still be used for view zoom and view rotation.
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="6" column="0">
<widget class="QPushButton" name="button_object_base_point"> <widget class="QPushButton" name="button_object_base_point">
<property name="toolTip"> <property name="toolTip">
<string>Create Base Point of all selected Object(s).</string> <string>Create Base Point of all selected Object(s).</string>
@ -882,7 +948,7 @@ MB2 and MB3 can still be used for view zoom and view rotation.
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="7" column="0">
<widget class="QPushButton" name="button_object_center_mass_point"> <widget class="QPushButton" name="button_object_center_mass_point">
<property name="toolTip"> <property name="toolTip">
<string>Create Center of Mass Point of all selected Object(s).</string> <string>Create Center of Mass Point of all selected Object(s).</string>
@ -902,7 +968,7 @@ MB2 and MB3 can still be used for view zoom and view rotation.
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0"> <item row="8" column="0">
<widget class="QPushButton" name="button_object_Npoint"> <widget class="QPushButton" name="button_object_Npoint">
<property name="toolTip"> <property name="toolTip">
<string>Create a set of points from selected Objetcs: <string>Create a set of points from selected Objetcs:
@ -928,29 +994,6 @@ MB2 and MB3 can still be used for view zoom and view rotation.
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="0">
<widget class="QPushButton" name="button_point_to_sketch">
<property name="toolTip">
<string>Transform Point(s) in Sketch's Point(s) by projection onto the Sketch's Plane:
- First select an existing Sketch;
- Select as much as Points needed;
Then click on this button.</string>
</property>
<property name="text">
<string>Point(s) to Sketch</string>
</property>
<property name="icon">
<iconset>
<normaloff>../Icons/WF_2Sketch.svg</normaloff>../Icons/WF_2Sketch.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item row="9" column="0"> <item row="9" column="0">
<spacer name="verticalSpacer_20"> <spacer name="verticalSpacer_20">
<property name="orientation"> <property name="orientation">
@ -970,7 +1013,7 @@ Then click on this button.</string>
<attribute name="title"> <attribute name="title">
<string>Point 3/3</string> <string>Point 3/3</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_22">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QPushButton" name="button_points_load"> <widget class="QPushButton" name="button_points_load">
<property name="toolTip"> <property name="toolTip">
@ -1121,6 +1164,29 @@ One (x, y, z) triplet per line seperated by blank.
</layout> </layout>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QPushButton" name="button_point_to_sketch">
<property name="toolTip">
<string>Transform Point(s) in Sketch's Point(s) by projection onto the Sketch's Plane:
- First select an existing Sketch;
- Select as much as Points needed;
Then click on this button.</string>
</property>
<property name="text">
<string>Point(s) to Sketch</string>
</property>
<property name="icon">
<iconset>
<normaloff>../Icons/WF_2Sketch.svg</normaloff>../Icons/WF_2Sketch.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item row="4" column="0">
<spacer name="verticalSpacer_35"> <spacer name="verticalSpacer_35">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -1151,7 +1217,7 @@ One (x, y, z) triplet per line seperated by blank.
<item row="0" column="0"> <item row="0" column="0">
<widget class="QTabWidget" name="tabWidget_2"> <widget class="QTabWidget" name="tabWidget_2">
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="Axis_Tab1_3"> <widget class="QWidget" name="Axis_Tab1_3">
<attribute name="title"> <attribute name="title">
@ -2278,20 +2344,87 @@ MB2 and MB3 can still be used for view zoom and view rotation.</string>
<string>Wire</string> <string>Wire</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_7"> <layout class="QGridLayout" name="gridLayout_7">
<item row="2" column="0"> <item row="0" column="0">
<spacer name="verticalSpacer_3"> <widget class="QPushButton" name="button_points_to_polygon">
<property name="orientation"> <property name="toolTip">
<enum>Qt::Vertical</enum> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Wire=(N Points):&lt;/p&gt;&lt;p&gt;Create a Polygon (wire) from a set of points.&lt;/p&gt;&lt;p&gt;- First select several Points (at least 2);&lt;/p&gt;&lt;p&gt;- Then push this button&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="text">
<string>Make Polygon</string>
</property>
<property name="icon">
<iconset>
<normaloff>../Icons/WF_makePolygon.svg</normaloff>../Icons/WF_makePolygon.svg</iconset>
</property>
<property name="iconSize">
<size> <size>
<width>20</width> <width>32</width>
<height>588</height> <height>32</height>
</size> </size>
</property> </property>
</spacer> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QPushButton" name="button_points_to_convex_2Dpolygon">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Wire=(N Points):&lt;/p&gt;&lt;p&gt;Create a Convex 2D Polygon (wire) from a set of points.&lt;/p&gt;&lt;p&gt;The Convex Polygon is the outer limit of all selected Points.&lt;/p&gt;&lt;p&gt; - First select several Points (at least 3);&lt;/p&gt;&lt;p&gt; Define the projection plane if needed.&lt;/p&gt;&lt;p&gt; It can be either&lt;/p&gt;&lt;p&gt; XY plane,&lt;/p&gt;&lt;p&gt; YZ plane,&lt;/p&gt;&lt;p&gt; XZ plane or&lt;/p&gt;&lt;p&gt; All 3 planes&lt;/p&gt;&lt;p&gt;- Then push the button.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Convex 2D Polygon</string>
</property>
<property name="icon">
<iconset>
<normaloff>../Icons/WF_convexPolygon.svg</normaloff>../Icons/WF_convexPolygon.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="point_proj_comboBox_2">
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The projection plane(s)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>All</string>
</property>
</item>
<item>
<property name="text">
<string>XY plane</string>
</property>
</item>
<item>
<property name="text">
<string>YZ plane</string>
</property>
</item>
<item>
<property name="text">
<string>XZ plane</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="button_4points_bezier"> <widget class="QPushButton" name="button_4points_bezier">
<property name="toolTip"> <property name="toolTip">
<string>Bezier Cubic=(4 Points): <string>Bezier Cubic=(4 Points):
@ -2314,25 +2447,18 @@ Create a Wire (Bezier Cubic) from 4 selected points.
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="3" column="0">
<widget class="QPushButton" name="button_points_to_polygon"> <spacer name="verticalSpacer_3">
<property name="toolTip"> <property name="orientation">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Wire=(N Points):&lt;/p&gt;&lt;p&gt;Create a Polygon (wire) from a set of points.&lt;/p&gt;&lt;p&gt;- First select several Points (at least 2);&lt;/p&gt;&lt;p&gt;- Then push this button&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> <enum>Qt::Vertical</enum>
</property> </property>
<property name="text"> <property name="sizeHint" stdset="0">
<string>Make Wire</string>
</property>
<property name="icon">
<iconset>
<normaloff>../Icons/WF_makePolygon.svg</normaloff>../Icons/WF_makePolygon.svg</iconset>
</property>
<property name="iconSize">
<size> <size>
<width>32</width> <width>20</width>
<height>32</height> <height>588</height>
</size> </size>
</property> </property>
</widget> </spacer>
</item> </item>
</layout> </layout>
</widget> </widget>
@ -2648,10 +2774,7 @@ in &quot;Ori. Pref.&quot; TAB</string>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QPushButton" name="button_threepoints_plane"> <widget class="QPushButton" name="button_threepoints_plane">
<property name="toolTip"> <property name="toolTip">
<string>Plane=(3 Points): <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Plane=(3 Points):&lt;/p&gt;&lt;p&gt;Create a Plane crossing 3 Points.&lt;/p&gt;&lt;p&gt; - Select at least 3 Points and/or&lt;/p&gt;&lt;p&gt; Select at least 2 Line/Edge(s)&lt;/p&gt;&lt;p&gt;- Second push this button&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
Create a Plane crossing 3 Points.
- First select 3 different points
- Second push this button</string>
</property> </property>
<property name="text"> <property name="text">
<string>Plane=(3 Points)</string> <string>Plane=(3 Points)</string>
@ -4184,60 +4307,6 @@ Original code from HighlightDifference.FCMacro
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_8"> <layout class="QGridLayout" name="gridLayout_8">
<item row="0" column="0"> <item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QPushButton" name="button_rotate_image">
<property name="text">
<string>Rotate</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="Image_comboBox_axis_rotate">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>X</string>
</property>
</item>
<item>
<property name="text">
<string>Y</string>
</property>
</item>
<item>
<property name="text">
<string>Z</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
<widget class="QPushButton" name="button_scale_image"> <widget class="QPushButton" name="button_scale_image">
@ -4371,7 +4440,7 @@ Note that some options are invalid regarding the image's plane.</string>
</item> </item>
</layout> </layout>
</item> </item>
<item row="2" column="0"> <item row="1" column="0">
<spacer name="verticalSpacer_4"> <spacer name="verticalSpacer_4">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -4394,7 +4463,7 @@ Note that some options are invalid regarding the image's plane.</string>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QTabWidget" name="tabWidget_9"> <widget class="QTabWidget" name="tabWidget_9">
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="align_tab_2"> <widget class="QWidget" name="align_tab_2">
<attribute name="title"> <attribute name="title">
@ -5532,7 +5601,7 @@ NB:
<attribute name="title"> <attribute name="title">
<string>Translate</string> <string>Translate</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_60"> <layout class="QGridLayout" name="gridLayout_20">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QFrame" name="frame_12"> <widget class="QFrame" name="frame_12">
<property name="sizePolicy"> <property name="sizePolicy">
@ -5671,8 +5740,66 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
</item> </item>
</layout> </layout>
</item> </item>
<item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_84">
<item>
<widget class="QPushButton" name="ObjTrans_button_reset">
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Reset</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_12">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="ObjTrans_button_apply">
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QTabWidget" name="tabWidget_12"> <widget class="QTabWidget" name="tabWidget_12">
<property name="enabled">
<bool>true</bool>
</property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>0</number>
</property> </property>
@ -5705,7 +5832,7 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
<property name="flat"> <property name="flat">
<bool>false</bool> <bool>false</bool>
</property> </property>
<layout class="QGridLayout" name="gridLayout_113"> <layout class="QGridLayout" name="gridLayout_19">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QComboBox" name="ObjTrans_comboBox_start"> <widget class="QComboBox" name="ObjTrans_comboBox_start">
<property name="enabled"> <property name="enabled">
@ -5729,8 +5856,11 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Choose here your starting Point(s)&lt;/p&gt;&lt;p&gt;it can be either:&lt;/p&gt;&lt;p&gt; - The Origin point (0,0,0),&lt;/p&gt;&lt;p&gt; - The Base point of the selected object(s),&lt;/p&gt;&lt;p&gt; - The Center point of the selected object(s),&lt;/p&gt;&lt;p&gt; - One selected Point by mouse&lt;/p&gt;&lt;p&gt; - One of the extrema of One Segment/Edge&lt;/p&gt;&lt;p&gt; - A user defined Points&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="currentIndex"> <property name="currentIndex">
<number>3</number> <number>0</number>
</property> </property>
<property name="sizeAdjustPolicy"> <property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContentsOnFirstShow</enum> <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
@ -5755,6 +5885,11 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
<string>To select</string> <string>To select</string>
</property> </property>
</item> </item>
<item>
<property name="text">
<string>From Segment</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>To define</string> <string>To define</string>
@ -5769,16 +5904,19 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>50</width> <width>0</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>120</width> <width>100</width>
<height>16777215</height> <height>29</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Once Point(s) or one Segment selected;&lt;/p&gt;&lt;p&gt;Click this button to activate the selection !&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Select</string> <string>Select</string>
</property> </property>
@ -5909,9 +6047,15 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
<attribute name="title"> <attribute name="title">
<string>End</string> <string>End</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_118">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox_23"> <widget class="QGroupBox" name="groupBox_23">
<property name="geometry">
<rect>
<x>9</x>
<y>9</y>
<width>183</width>
<height>225</height>
</rect>
</property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>150</width> <width>150</width>
@ -5924,7 +6068,7 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
<property name="flat"> <property name="flat">
<bool>false</bool> <bool>false</bool>
</property> </property>
<layout class="QGridLayout" name="gridLayout_119"> <layout class="QGridLayout" name="gridLayout_12">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QComboBox" name="ObjTrans_comboBox_end"> <widget class="QComboBox" name="ObjTrans_comboBox_end">
<property name="enabled"> <property name="enabled">
@ -5991,18 +6135,27 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>100</width> <width>0</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>120</width> <width>100</width>
<height>16777215</height> <height>29</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Once Point(s) selected;&lt;/p&gt;&lt;p&gt;Click this button to activate the selection !&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Select</string> <string>Select</string>
</property> </property>
@ -6122,15 +6275,67 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
</item> </item>
</layout> </layout>
</widget> </widget>
</item>
</layout>
</widget> </widget>
</widget> <widget class="QWidget" name="tab">
</item> <attribute name="title">
<item row="3" column="0"> <string>Seg.</string>
<layout class="QHBoxLayout" name="horizontalLayout_84"> </attribute>
<layout class="QGridLayout" name="gridLayout_21">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
<widget class="QPushButton" name="ObjTrans_button_reset"> <widget class="QSlider" name="ObjTrans_horizontalSlider">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>39</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Once a Segment(s) is selected as starting Point(s),&lt;/p&gt;&lt;p&gt;This slider define the ending Point(s) by defining the relative distance from the starting Point(s).&lt;/p&gt;&lt;p&gt;Slider values are : -1000% to 1000%&lt;/p&gt;&lt;p&gt;100% mean full length of the Segment(s) with one ends as starting point(s)&lt;/p&gt;&lt;p&gt;-100% mean full length of the Segment(s) by reversing the starting Point(s)&lt;/p&gt;&lt;p&gt;0% means you do not Translate your selected Object(s)&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimum">
<number>-1000</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="value">
<number>100</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksBothSides</enum>
</property>
<property name="tickInterval">
<number>20</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_85">
<item>
<widget class="QLineEdit" name="ObjTrans_lineEdit_length_seg">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>40</width> <width>40</width>
@ -6143,44 +6348,50 @@ On the last result the same Sketch is both link to Pad001 but also still to Pad.
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enter here a more precise value :&lt;/p&gt;&lt;p&gt;100% mean full length of the Segment(s) with one ends as starting point(s)&lt;/p&gt;&lt;p&gt;-100% mean full length of the Segment(s) by reversing the starting Point(s)&lt;/p&gt;&lt;p&gt;Maximum values allowed [-1000, 1000]&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text"> <property name="text">
<string>Reset</string> <string>100.0</string>
</property>
<property name="maxLength">
<number>32769</number>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<spacer name="horizontalSpacer_12"> <widget class="QLabel" name="label_length_segment">
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string> (%)</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Vertical</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>20</width> <width>20</width>
<height>20</height> <height>138</height>
</size> </size>
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<widget class="QPushButton" name="ObjTrans_button_apply">
<property name="minimumSize">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>60</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Apply</string>
</property>
</widget>
</item>
</layout> </layout>
</widget>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'WF_ObjParCurve2DEditGui_2016.ui' # Form implementation generated from reading ui file 'WF_ObjParCurve2DEditGui_2016.ui'
# #
# Created: Fri Dec 30 15:42:17 2016 # Created: Thu Feb 2 19:33:38 2017
# by: PySide UI code generator 4.11.3 # by: PySide UI code generator 4.11.3
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!

View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'WF_ObjParCurve3DEditGui_2016.ui' # Form implementation generated from reading ui file 'WF_ObjParCurve3DEditGui_2016.ui'
# #
# Created: Fri Dec 30 15:42:28 2016 # Created: Thu Feb 2 19:33:38 2017
# by: PySide UI code generator 4.11.3 # by: PySide UI code generator 4.11.3
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!

View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'WF_ObjSurfaceEditGui_2016.ui' # Form implementation generated from reading ui file 'WF_ObjSurfaceEditGui_2016.ui'
# #
# Created: Fri Dec 30 15:42:38 2016 # Created: Thu Feb 2 19:33:38 2017
# by: PySide UI code generator 4.11.3 # by: PySide UI code generator 4.11.3
# #
# WARNING! All changes made in this file will be lost! # WARNING! All changes made in this file will be lost!

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,15 @@
#!/bin/sh #!/bin/sh
m_list_of_ui=`ls -1 *.ui`
m_ui_file=$1 for m_ui in ${m_list_of_ui} ; do
#m_ui_file=$1
m_ui_file=${m_ui}
m_ui_base=`basename ${m_ui_file} .ui` m_ui_base=`basename ${m_ui_file} .ui`
pyuic4 ${m_ui_base}.ui > ${m_ui_base}.py pyuic4 ${m_ui_base}.ui > ${m_ui_base}.py
cat ${m_ui_base}.py | sed 's#Icons/#icons:#g ' | sed 's#PyQt4#PySide#g ' | sed 's#QtCore.QString.fromUtf8(#_fromUtf8(#g ' | sed 's#../icons:#icons:#g '>tmp.py cat ${m_ui_base}.py | sed 's#Icons/#icons:#g ' | sed 's#PyQt4#PySide#g ' | sed 's#QtCore.QString.fromUtf8(#_fromUtf8(#g ' | sed 's#../icons:#icons:#g '>tmp.py
mv tmp.py ${m_ui_base}.py mv tmp.py ${m_ui_base}.py
cp ${m_ui_base}.py ../${m_ui_base}.py cp ${m_ui_base}.py ../${m_ui_base}.py
done

File diff suppressed because it is too large Load Diff

View File

@ -68,7 +68,7 @@ from WF_ObjRot_2015 import *
from WF_Utils_2015 import * from WF_Utils_2015 import *
global myRelease global myRelease
myRelease = "2016_12_30" myRelease = "2017_02_05"
import time import time
@ -169,6 +169,8 @@ m_widthPlane = 10.0
m_extensionPlane = 50.0 m_extensionPlane = 50.0
m_extensionAxis = 50.0 m_extensionAxis = 50.0
m_attach_point = "Mid" m_attach_point = "Mid"
m_projection_plane = "All"
m_projection_plane2 = "All"
m_letter = "A" m_letter = "A"
m_cut_selectObjects = [] m_cut_selectObjects = []
@ -4489,7 +4491,6 @@ def plot_points_random():
- Then push the button. - Then push the button.
""" """
msg=verbose msg=verbose
msg = 1
import numpy as np import numpy as np
error_msg = """Unable to create random Point(s) : error_msg = """Unable to create random Point(s) :
@ -4527,20 +4528,180 @@ def plot_points_random():
Number_of_Points, Point_List = m_sel.get_points(getfrom=["Points"]) Number_of_Points, Point_List = m_sel.get_points(getfrom=["Points"])
if msg != 0: if msg != 0:
print_msg("Number_of_Points=" + str(Number_of_Points)) print_msg("Number_of_Points=" + str(Number_of_Points))
Number_of_Edges, Edge_List = m_sel.get_segments(getfrom=["Segments","Curves"])
if msg != 0:
print_msg("Number_of_Edges=" + str(Number_of_Edges))
m_limit = m_distanceRandomPoints/2 m_limit = m_distanceRandomPoints/2
if (Number_of_Points >= 1): if (Number_of_Points >= 1):
m_Point = Point_List[-1] for m_Point in Point_List:
#m_Point = Point_List[-1]
try :
for m_point_id in range(m_numberRandomPoint): for m_point_id in range(m_numberRandomPoint):
x, y, z = m_distanceRandomPoints* np.random.random_sample((3,)) - m_limit x, y, z = m_distanceRandomPoints* np.random.random_sample((3,)) - m_limit
x -= m_Point.Point.x x += m_Point.Point.x
y -= m_Point.Point.y y += m_Point.Point.y
z -= m_Point.Point.z z += m_Point.Point.z
plot_point(Base.Vector(x, y, z), part, name, str(m_dir)) Point_User_Name = plot_point(Base.Vector(x, y, z), part, name, str(m_dir))
print_point(Base.Vector(x, y, z),str(Point_User_Name) + result_msg + " at :")
except:
printError_msg(error_msg)
elif (Number_of_Edges >= 1):
for m_line in Edge_List:
try:
if not hasattr(m_line,'discretize'):
break
m_points = m_line.discretize(m_numberRandomPoint)
for m_point in m_points:
x, y, z = m_distanceRandomPoints* np.random.random_sample((3,)) - m_limit
x += m_point.x
y += m_point.y
z += m_point.z
Point_User_Name = plot_point(Base.Vector(x, y, z), part, name, str(m_dir))
print_point(Base.Vector(x, y, z),str(Point_User_Name) + result_msg + " at :")
except:
printError_msg(error_msg)
else: else:
try:
for m_point_id in range(m_numberRandomPoint): for m_point_id in range(m_numberRandomPoint):
x, y, z = m_distanceRandomPoints* np.random.random_sample((3,)) - m_limit x, y, z = m_distanceRandomPoints* np.random.random_sample((3,)) - m_limit
plot_point(Base.Vector(x, y, z), part, name, str(m_dir)) Point_User_Name = plot_point(Base.Vector(x, y, z), part, name, str(m_dir))
print_point(Base.Vector(x, y, z),str(Point_User_Name) + result_msg + " at :")
except:
printError_msg(error_msg)
def sel_projection(*argc):
""" Projection plane by combo box.
Options :
All
XY plane
YZ plane
XZ plane
"""
global m_projection_plane
global verbose
msg=verbose
if msg != 0:
print_msg("Projection plane location by combo box !")
m_projection_plane = "All"
if str(*argc) == "XY plane":
m_projection_plane = "XY"
if str(*argc) == "YZ plane":
m_projection_plane = "YZ"
if str(*argc) == "XZ plane":
m_projection_plane = "XZ"
if msg != 0:
print_msg("argc is " + str(*argc) + " and Projection plane " + str(m_attach_point) + " selected !")
def plot_projected_points():
"""Create projected point(s) on the choosen main planes.
- Select one (or several) Point(s) and/or one (or several) Axis.
Define the projection plane if needed.
It can be either
XY plane,
YZ plane,
XZ plane or
All 3 planes
"""
msg=verbose
error_msg = """Unable to create projected Point(s) :
- Select one (or several) Point(s) and/or one (or several) Axis.
Define the projection plane if needed.
It can be either
XY plane,
YZ plane,
XZ plane or
All 3 planes
- Then push the button.
"""
result_msg = " : projected Point(s) created !"
createFolders('WorkPoints')
m_dir = 'Set'
name = "ProjectedPoint"
part = "Part::Feature"
m_actDoc = get_ActiveDocument(info=msg)
if m_actDoc == None:
return None
try:
m_r = App.ActiveDocument.getObject("WorkPoints").newObject("App::DocumentObjectGroup", str(m_dir))
except:
printError_msg("Could not Create '"+ str(m_dir) +"' Objects Group!")
return None
m_dir = m_r.Name
m_selEx = Gui.Selection.getSelectionEx(m_actDoc.Name)
if msg != 0:
print_msg(str(m_selEx))
m_sel = Selection(m_selEx)
if not m_sel :
print_msg("Unable to create a Selection Object !")
return None
if msg != 0:
print_msg(str(m_sel))
try:
Number_of_Points, Point_List = m_sel.get_points(getfrom=["Points"])
if msg != 0:
print_msg("Number_of_Points=" + str(Number_of_Points))
Number_of_Edges, Edge_List = m_sel.get_segments(getfrom=["Segments","Curves","Planes","Objects"])
if msg != 0:
print_msg("Number_of_Edges=" + str(Number_of_Edges))
my_point_list = []
if (Number_of_Edges >= 1):
for Selected_Edge in Edge_List:
Vector_A = Selected_Edge.valueAt( 0.0 )
Vector_B = Selected_Edge.valueAt( Edge_List[0].Length )
my_point_list.append(Vector_A)
my_point_list.append(Vector_B)
if (Number_of_Points >= 1):
for Selected_Point in Point_List:
my_point_list.append(Selected_Point.Point)
for m_point in my_point_list:
x = m_point.x
y = m_point.y
z = m_point.z
if m_projection_plane == "All" or m_projection_plane == "XY":
Vector_A = Base.Vector(x, y, 0.0)
Vector_B = Base.Vector(x, y, z)
Point_User_Name = plot_point(Vector_A, part, name, str(m_dir))
print_point(Vector_A,str(Point_User_Name) + result_msg + " at :")
Axis_User_Name, axis = plot_axis(Vector_A, Vector_B, part="Part::Feature", name="Axis_ProjectionToXY", grp=str(m_dir))
try:
Gui.ActiveDocument.getObject(Axis_User_Name).DrawStyle = "Dotted"
except:
print_msg("Not able to set DrawStyle !")
if m_projection_plane == "All" or m_projection_plane == "YZ":
Vector_A = Base.Vector(0.0, y, z)
Vector_B = Base.Vector(x, y, z)
Point_User_Name = plot_point(Vector_A, part, name, str(m_dir))
print_point(Vector_A,str(Point_User_Name) + result_msg + " at :")
Axis_User_Name, axis = plot_axis(Vector_A, Vector_B, part="Part::Feature", name="Axis_ProjectionToYZ", grp=str(m_dir))
try:
Gui.ActiveDocument.getObject(Axis_User_Name).DrawStyle = "Dotted"
except:
print_msg("Not able to set DrawStyle !")
if m_projection_plane == "All" or m_projection_plane == "XZ":
Vector_A = Base.Vector(x, 0.0, z)
Vector_B = Base.Vector(x, y, z)
Point_User_Name = plot_point(Vector_A, part, name, str(m_dir))
print_point(Vector_A,str(Point_User_Name) + result_msg + " at :")
Axis_User_Name, axis = plot_axis(Vector_A, Vector_B, part="Part::Feature", name="Axis_ProjectionToXZ", grp=str(m_dir))
try:
Gui.ActiveDocument.getObject(Axis_User_Name).DrawStyle = "Dotted"
except:
print_msg("Not able to set DrawStyle !")
except:
printError_msg(error_msg)
def plot_centerObjectAxes(): def plot_centerObjectAxes():
@ -6648,7 +6809,6 @@ options = {'Edge' : edgeToSketch, 'Vertex' : vertexToSketch, 'Face' : faceToSket
def toSketch(): def toSketch():
msg=verbose msg=verbose
msg =1
m_actDoc=get_ActiveDocument(info=msg) m_actDoc=get_ActiveDocument(info=msg)
m_selEx = Gui.Selection.getSelectionEx(m_actDoc.Name) m_selEx = Gui.Selection.getSelectionEx(m_actDoc.Name)
@ -6667,7 +6827,6 @@ def circle_toSketch():
Then click on this button. Then click on this button.
""" """
msg=verbose msg=verbose
msg=1
m_tolerance=1e-12 m_tolerance=1e-12
m_actDoc = get_ActiveDocument(info=msg) m_actDoc = get_ActiveDocument(info=msg)
@ -7029,7 +7188,8 @@ def plot_linecenterCircle():
centered on the Point, perpendicular to the Axis centered on the Point, perpendicular to the Axis
with the given radius. with the given radius.
""" """
msg=0 msg=verbose
global m_radiusCircle global m_radiusCircle
createFolders('WorkCircles') createFolders('WorkCircles')
error_msg = "Unable to create a Circle : \nSelect one Edge and one Point only!" error_msg = "Unable to create a Circle : \nSelect one Edge and one Point only!"
@ -7069,7 +7229,8 @@ def plot_linepointCircle():
"""Select an Axis and a Point to create a Circle """Select an Axis and a Point to create a Circle
centered on the Axis and tangenting the Point. centered on the Axis and tangenting the Point.
""" """
msg=0 msg=verbose
createFolders('WorkCircles') createFolders('WorkCircles')
error_msg = "Unable to create a Circle : \nSelect one Edge and one Point only!" error_msg = "Unable to create a Circle : \nSelect one Edge and one Point only!"
result_msg = " : Circle tangented to a Point created !" result_msg = " : Circle tangented to a Point created !"
@ -7109,7 +7270,8 @@ def plot_linepointCircle():
def plot_3pointsArc(): def plot_3pointsArc():
"""Select 3 Points to create an Arc. """Select 3 Points to create an Arc.
""" """
msg=0 msg=verbose
createFolders('WorkArcs') createFolders('WorkArcs')
error_msg = "Unable to create an Arc: \nSelect 3 Points only!" error_msg = "Unable to create an Arc: \nSelect 3 Points only!"
result_msg = " : Arc from 3 points created !" result_msg = " : Arc from 3 points created !"
@ -7151,7 +7313,8 @@ def plot_3pointsArc():
def plot_3pointsCircle(): def plot_3pointsCircle():
"""Select 3 Points to create a Circle. """Select 3 Points to create a Circle.
""" """
msg=0 msg=verbose
createFolders('WorkCircles') createFolders('WorkCircles')
error_msg = "Unable to create a Circle : \nSelect 3 Points only!" error_msg = "Unable to create a Circle : \nSelect 3 Points only!"
result_msg = " : Circle from 3 points created !" result_msg = " : Circle from 3 points created !"
@ -7382,7 +7545,8 @@ def plot_cutCircle():
def plot_3pointsEllipse(): def plot_3pointsEllipse():
"""Select a center and 2 Points to create an Ellipse. """Select a center and 2 Points to create an Ellipse.
""" """
msg=0 msg=verbose
createFolders('WorkCircles') createFolders('WorkCircles')
error_msg = "Unable to create a Ellipse : \nSelect one Center and 2 Points only!" error_msg = "Unable to create a Ellipse : \nSelect one Center and 2 Points only!"
result_msg = " : Ellipse from 3 points created !" result_msg = " : Ellipse from 3 points created !"
@ -7415,9 +7579,100 @@ def plot_3pointsEllipse():
def plot_3PointsPlane(): def plot_3PointsPlane():
""" Plane=(3 Points):
Create a Plane crossing 3 Points.
- Select at least 3 Points and/or
Select at least 2 Line/Edge(s)
"""
msg=verbose
error_msg = """Unable to create Plane(s) :
Select at least 3 Points and/or
Select at least 2 Line/Edge(s) !"""
result_msg = " : Plane(s) created !"
createFolders('WorkPlanes')
m_dir = 'Set'
name = "WorkPlane"
part = "Part::Feature"
m_actDoc = get_ActiveDocument(info=msg)
if m_actDoc == None:
return None
try:
m_r = App.ActiveDocument.getObject("WorkPoints").newObject("App::DocumentObjectGroup", str(m_dir))
except:
printError_msg("Could not Create '"+ str(m_dir) +"' Objects Group!")
return None
m_dir = m_r.Name
m_selEx = Gui.Selection.getSelectionEx(m_actDoc.Name)
if msg != 0:
print_msg(str(m_selEx))
m_sel = Selection(m_selEx)
if not m_sel :
print_msg("Unable to create a Selection Object !")
return None
if msg != 0:
print_msg(str(m_sel))
try:
Number_of_Points, Point_List = m_sel.get_points(getfrom=["Points","Segments","Curves"])
if msg != 0:
print_msg("Number_of_Points=" + str(Number_of_Points))
points = []
m_i=0
if Number_of_Points < 3 :
printError_msg(error_msg)
for m_i in xrange(0,Number_of_Points,3):
if m_i+1 > Number_of_Points or m_i+2 > Number_of_Points:
break
Point_A = Point_List[m_i+0].Point
points.append(Point_A)
Point_B = Point_List[m_i+1].Point
points.append(Point_B)
Point_C = Point_List[m_i+2].Point
points.append(Point_C)
if msg != 0:
print_point(Point_A, msg="Point_A : ")
print_point(Point_B, msg="Point_B : ")
print_point(Point_C, msg="Point_C : ")
Vector_Center = meanVectorsPoint(points,info=msg)
#Vector_Center = centerBBVectorsPoint(points, info=0)
xmax, xmin, ymax, ymin, zmax, zmin = minMaxVectorsLimits(points,info=0)
#print_point(Vector_Center, msg="Center of A, B and C : ")
length = xmax - xmin
if (ymax - ymin) > length:
length = ymax - ymin
if (zmax - zmin) > length:
length = zmax - zmin
print_msg("length = " +str(length))
Edge_Vector = Point_B - Point_A
#Edge_Length = Edge_Vector.Length
Edge_Length = length * 1.5
AC_Vector = Point_C - Point_A
Plane_Point = Vector_Center
Plane_Normal = Edge_Vector.cross( AC_Vector )
Plane_User_Name, plane = plot_plane(Edge_Length, Edge_Length, Plane_Point, Plane_Normal, part, name, str(m_dir))
print_msg(str(Plane_User_Name) + result_msg )
except:
printError_msg(error_msg)
def plot_3PointsPlane_old():
""" Create a Plane from 3 Points. """ Create a Plane from 3 Points.
""" """
msg=0 msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Plane : \nSelect three points only !" error_msg = "Unable to create Plane : \nSelect three points only !"
result_msg = " : Plane created !" result_msg = " : Plane created !"
@ -7474,7 +7729,8 @@ def plot_3PointsPlane():
def plot_2PointsPlane(): def plot_2PointsPlane():
""" Create a Plane from 2 Points. """ Create a Plane from 2 Points.
""" """
msg=0 msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Plane : \nSelect two points only !" error_msg = "Unable to create Plane : \nSelect two points only !"
result_msg = " : Plane created !" result_msg = " : Plane created !"
@ -7529,7 +7785,6 @@ def plot_NPointsPlane():
- First select several Points (at least 3). - First select several Points (at least 3).
""" """
msg=verbose msg=verbose
msg=1
try: try:
import numpy as np import numpy as np
@ -7618,6 +7873,7 @@ def plot_axisPointPlane():
""" """
global verbose global verbose
msg=verbose msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Plane : \nSelect one Line and one Point only, \nwith the Point NOT on the Line !" error_msg = "Unable to create Plane : \nSelect one Line and one Point only, \nwith the Point NOT on the Line !"
result_msg = " : Plane created !" result_msg = " : Plane created !"
@ -7679,7 +7935,8 @@ def plot_axisPointPlane():
def plot_perpendicularAxisPointPlane(): def plot_perpendicularAxisPointPlane():
""" Create a Plane perpendicular to a Line a crossing a Point. """ Create a Plane perpendicular to a Line a crossing a Point.
""" """
msg=0 msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Plane : \nSelect one Line and one point only !" error_msg = "Unable to create Plane : \nSelect one Line and one point only !"
result_msg = " : Plane created !" result_msg = " : Plane created !"
@ -7734,7 +7991,8 @@ def extensionPlanePointPlane(value):
def plot_planePointPlane(): def plot_planePointPlane():
""" Create a plane passing through a Point and parallel to a given Plane. """ Create a plane passing through a Point and parallel to a given Plane.
""" """
msg=0 msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Plane : \nSelect one Plane and one Point only !" error_msg = "Unable to create Plane : \nSelect one Plane and one Point only !"
result_msg = " : Plane created !" result_msg = " : Plane created !"
@ -7784,7 +8042,8 @@ def plot_planeAxisPlane():
""" Use a plane and a line to create Plane perpedicular """ Use a plane and a line to create Plane perpedicular
to the first Plane and crossing the Line to the first Plane and crossing the Line
""" """
msg=0 msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Planes : \nSelect one Line and one Plane only !" error_msg = "Unable to create Planes : \nSelect one Line and one Plane only !"
result_msg = " : Plane created !" result_msg = " : Plane created !"
@ -7878,6 +8137,7 @@ def distPlane(value):
""" """
global verbose global verbose
msg=verbose msg=verbose
try: try:
# First we check if a valid number have been entered # First we check if a valid number have been entered
global m_distPlane global m_distPlane
@ -7907,6 +8167,7 @@ def plot_distPlane():
global m_numberPlane global m_numberPlane
global m_distPlane global m_distPlane
msg=verbose msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Plane(s) : \nSelect at least one Plane !" error_msg = "Unable to create Plane(s) : \nSelect at least one Plane !"
result_msg = " : Plane(s) created !" result_msg = " : Plane(s) created !"
@ -8070,6 +8331,7 @@ def plot_extensionPlane():
""" """
global verbose global verbose
msg=verbose msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Plane : \nSelect Plane(s) only !" error_msg = "Unable to create Plane : \nSelect Plane(s) only !"
result_msg = " : Plane created !" result_msg = " : Plane created !"
@ -8117,6 +8379,7 @@ def plot_clickForPlane2():
a radius of 20 mm a radius of 20 mm
""" """
msg=verbose msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
m_actDoc = get_ActiveDocument(info=msg) m_actDoc = get_ActiveDocument(info=msg)
@ -8192,7 +8455,8 @@ def plot_clickForPlane2():
def plot_centerObjectPlanes(): def plot_centerObjectPlanes():
""" Create 3 Planes XY, YZ and XZ at center point of all selected objects. """ Create 3 Planes XY, YZ and XZ at center point of all selected objects.
""" """
msg=0 msg=verbose
createFolders('WorkPlanes') createFolders('WorkPlanes')
error_msg = "Unable to create Planes : \nSelect at least one object !" error_msg = "Unable to create Planes : \nSelect at least one object !"
result_msg = " : Planes created !" result_msg = " : Planes created !"
@ -8364,7 +8628,7 @@ def plot_bezier():
def points_toPolygon(): def points_toPolygon():
""" Create a polygon from a set of points. """ Create a polygon from a set of points.
- First select several Points - First select several Points (at least 2).
""" """
msg = verbose msg = verbose
@ -8372,7 +8636,7 @@ def points_toPolygon():
m_face = False m_face = False
error_msg = """Unable to create Polygon : error_msg = """Unable to create Polygon :
Select at least two points !""" Select at least 2 points !"""
result_msg = " : Polygon created !" result_msg = " : Polygon created !"
createFolders('WorkWires') createFolders('WorkWires')
@ -8422,9 +8686,175 @@ def points_toPolygon():
except: except:
printError_msg(error_msg) printError_msg(error_msg)
def sel_projection2(*argc):
""" Projection plane by combo box.
Options :
All
XY plane
YZ plane
XZ plane
"""
global m_projection_plane2
global verbose
msg=verbose
if msg != 0:
print_msg("Projection plane location by combo box !")
m_projection_plane2 = "All"
if str(*argc) == "XY plane":
m_projection_plane2 = "XY"
if str(*argc) == "YZ plane":
m_projection_plane2 = "YZ"
if str(*argc) == "XZ plane":
m_projection_plane2 = "XZ"
if msg != 0:
print_msg("argc is " + str(*argc) + " and Projection plane " + str(m_attach_point) + " selected !")
def Plot_convex2Dpolygon():
"""Create a Convex 2D Polygon (wire) from a set of points.
The Convex Polygon is the outer limit of all selected Points.
- First select several Points (at least 3);
Define the projection plane if needed.
It can be either
XY plane,
YZ plane,
XZ plane or
All 3 planes
- Then push the button.
"""
def isLeftTurn(p1, p2, p3):
""" Return True if 3 2D points can be reached with a left turn.
"""
return (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p1[1] - p3[1]) * (p2[0] - p3[0]) > tolerance
def convex2Dpolygon (m_array):
# Sort on x
m_array.sort(key=lambda tup: tup[0])
m_top = []
m_bottom = []
for m_p in m_array :
while len(m_top) >= 2 and not isLeftTurn(m_p, m_top[-1], m_top[-2]) :
m_top.pop()
m_top.append(m_p)
while len(m_bottom) >=2 and not isLeftTurn(m_bottom[-2], m_bottom[-1], m_p):
m_bottom.pop()
m_bottom.append(m_p)
return m_bottom[:-1] + m_top[:0:-1]
msg = verbose
msg = 1
m_close = True
m_face = False
error_msg = """Unable to create Polygon :
Select at least 3 points !
Define the projection plane if needed.
It can be either
XY plane,
YZ plane,
XZ plane or
All 3 planes
- Then push the button."""
result_msg = " : Convex Polygon(s) created !"
createFolders('WorkWires')
m_dir = 'Set'
name = "Convex_2DPolygon_from_N_Points"
part = "Part::Feature"
m_actDoc = get_ActiveDocument(info=msg)
if m_actDoc == None:
return None
try:
m_r = App.ActiveDocument.getObject("WorkWires").newObject("App::DocumentObjectGroup", str(m_dir))
except:
printError_msg("Could not Create '"+ str(m_dir) +"' Objects Group!")
return None
m_dir = m_r.Name
Selection = get_SelectedObjects(info=msg, printError=False)
try:
SelectedObjects = Selection
Number_of_Points = SelectedObjects[0]
if msg != 0:
print_msg("Number_of_Points=" + str(Number_of_Points))
if Number_of_Points > 2:
m_x = 0.0
m_y = 0.0
m_z = 0.0
m_array = []
m_polygon = []
matriz = []
Point_List = SelectedObjects[3]
if msg != 0:
print_msg("Point_List=" + str(Point_List))
if m_projection_plane2 == "All" or m_projection_plane2 == "XY":
for m_point in Point_List:
x = m_point.Point.x
y = m_point.Point.y
z = m_point.Point.z
m_array.append((x,y))
if msg != 0:
print_msg("m_array=" + str(m_array))
m_polygon = convex2Dpolygon (m_array)
for m_2Dpoint in m_polygon:
m_x = m_2Dpoint[0]
m_y = m_2Dpoint[1]
m_z = 0.0
matriz.append(FreeCAD.Vector(m_x,m_y,m_z))
curve_User_Name, curve = plot_curve(matriz, m_close, m_face, part, name, str(m_dir))
print_msg(str(curve_User_Name) + result_msg + " into : " + str(m_dir))
m_array = []
m_polygon = []
matriz = []
if m_projection_plane2 == "All" or m_projection_plane2 == "YZ":
for m_point in Point_List:
x = m_point.Point.x
y = m_point.Point.y
z = m_point.Point.z
m_array.append((y,z))
if msg != 0:
print_msg("m_array=" + str(m_array))
m_polygon = convex2Dpolygon (m_array)
for m_2Dpoint in m_polygon:
m_x = 0.0
m_y = m_2Dpoint[0]
m_z = m_2Dpoint[1]
matriz.append(FreeCAD.Vector(m_x,m_y,m_z))
curve_User_Name, curve = plot_curve(matriz, m_close, m_face, part, name, str(m_dir))
print_msg(str(curve_User_Name) + result_msg + " into : " + str(m_dir))
m_array = []
m_polygon = []
matriz = []
if m_projection_plane2 == "All" or m_projection_plane2 == "XZ":
for m_point in Point_List:
x = m_point.Point.x
y = m_point.Point.y
z = m_point.Point.z
m_array.append((x,z))
if msg != 0:
print_msg("m_array=" + str(m_array))
m_polygon = convex2Dpolygon (m_array)
for m_2Dpoint in m_polygon:
m_x = m_2Dpoint[0]
m_y = 0.0
m_z = m_2Dpoint[1]
matriz.append(FreeCAD.Vector(m_x,m_y,m_z))
curve_User_Name, curve = plot_curve(matriz, m_close, m_face, part, name, str(m_dir))
print_msg(str(curve_User_Name) + result_msg + " into : " + str(m_dir))
else:
printError_msg(error_msg)
except:
printError_msg(error_msg)
def plot_4points_bezier(): def plot_4points_bezier():
msg=1 msg=verbose
def Bezier_Cubic_curve(poles): def Bezier_Cubic_curve(poles):
#draws a degree 3 rational bspline from first to last point, #draws a degree 3 rational bspline from first to last point,
@ -8563,6 +8993,7 @@ def plot_boundingBoxes():
"""Create bounding boxes around each of selected object(s). """Create bounding boxes around each of selected object(s).
""" """
msg=verbose msg=verbose
createVol=BBox_volum createVol=BBox_volum
createFolders('WorkBoxes') createFolders('WorkBoxes')
@ -8625,6 +9056,7 @@ def plot_boundingBox():
""" Create one bounding box around all of selected object(s). """ Create one bounding box around all of selected object(s).
""" """
msg=verbose msg=verbose
createVol=BBox_volum createVol=BBox_volum
createFolders('WorkBoxes') createFolders('WorkBoxes')
@ -8695,7 +9127,7 @@ def plot_axisPointCylinder():
selected point. selected point.
""" """
msg=verbose msg=verbose
msg=1
createFolders('WorkObjects') createFolders('WorkObjects')
error_msg = "Unable to create a Cylinder : \n"\ error_msg = "Unable to create a Cylinder : \n"\
"Select one or several couple of one Axis and one point!" "Select one or several couple of one Axis and one point!"
@ -8783,7 +9215,7 @@ def plot_axisPointCube():
selected point. selected point.
""" """
msg=verbose msg=verbose
msg=1
createFolders('WorkObjects') createFolders('WorkObjects')
error_msg = "Unable to create a Cube : \n"\ error_msg = "Unable to create a Cube : \n"\
"Select or several couple of one Axis and one point!" "Select or several couple of one Axis and one point!"
@ -8859,6 +9291,7 @@ def plot_centerSphere():
at the selected point(s). at the selected point(s).
""" """
msg=verbose msg=verbose
createFolders('WorkObjects') createFolders('WorkObjects')
error_msg =\ error_msg =\
@ -9237,6 +9670,7 @@ def plot_centerDome():
Original code from : Ulrich Brammer Original code from : Ulrich Brammer
""" """
msg=verbose msg=verbose
createFolders('WorkObjects') createFolders('WorkObjects')
error_msg =\ error_msg =\
@ -9316,6 +9750,7 @@ def letter(value):
""" """
global verbose global verbose
msg=verbose msg=verbose
try: try:
# First we check if a valid number have been entered # First we check if a valid number have been entered
global m_letter global m_letter
@ -9336,9 +9771,12 @@ def plot_letter():
NB: NB:
Change the text and his size if needed Change the text and his size if needed
""" """
msg=verbose
import Draft import Draft
def text_at(Plane_Point,Plane_Normal): def text_at(Plane_Point,Plane_Normal):
msg=verbose
text_User_Name, text = plot_text(m_letter, m_sizeLetter, part, name, grp="WorkObjects") text_User_Name, text = plot_text(m_letter, m_sizeLetter, part, name, grp="WorkObjects")
text_Point = text.Shape.BoundBox.Center text_Point = text.Shape.BoundBox.Center
text_Normal = text.Shape.Faces[0].normalAt(0,0) text_Normal = text.Shape.Faces[0].normalAt(0,0)
@ -9366,8 +9804,6 @@ def plot_letter():
m_newplace = App.Placement(m_base.add(m_move), m_rot ) m_newplace = App.Placement(m_base.add(m_move), m_rot )
text.Placement = m_newplace text.Placement = m_newplace
msg=verbose
msg=1
createFolders('WorkObjects') createFolders('WorkObjects')
error_msg = "Unable to create Text : \nSelect one Plane and one Point !" error_msg = "Unable to create Text : \nSelect one Plane and one Point !"
@ -9556,6 +9992,7 @@ def sel_transition(*argc):
""" """
global sweep_transition global sweep_transition
msg=verbose msg=verbose
if msg != 0: if msg != 0:
print_msg("Transition between profiles choice by combo box !") print_msg("Transition between profiles choice by combo box !")
sweep_transition = 2 sweep_transition = 2
@ -9800,7 +10237,6 @@ def plot_sectionBeam():
""" """
import WorkFeature.Beam.beam as BM import WorkFeature.Beam.beam as BM
msg=verbose msg=verbose
msg=1
createFolders('WorkObjects') createFolders('WorkObjects')
error_msg =\ error_msg =\
@ -9857,10 +10293,9 @@ def plot_sectionSweep2():
Or if the Section wire is not closed, only a shell will be created. Or if the Section wire is not closed, only a shell will be created.
""" """
msg=verbose msg=verbose
msg=1
# variable makeSolid = 1 to create solid, 0 to create surfaces # variable makeSolid = 1 to create solid, 0 to create surfaces
makeSolid=ssweep_solid makeSolid=sweep_solid
isFrenet=sweep_frenet isFrenet=sweep_frenet
transition=sweep_transition transition=sweep_transition
@ -10031,6 +10466,7 @@ def sel_imageAxisScale(*argc):
""" """
global imageAxisScale global imageAxisScale
msg=verbose msg=verbose
if msg != 0: if msg != 0:
print_msg("Axis or Plane of Scaling for image choice by combo box !") print_msg("Axis or Plane of Scaling for image choice by combo box !")
#imageAxisScale = "XY" #imageAxisScale = "XY"
@ -10056,7 +10492,6 @@ def lengthImage(value):
def scale_image(): def scale_image():
msg=verbose msg=verbose
msg=1
error_msg = "Unable to scale Image : \n"\ error_msg = "Unable to scale Image : \n"\
"Select at least \n"\ "Select at least \n"\
@ -10428,7 +10863,8 @@ def cut_selectObject():
""" """
global myDialog global myDialog
global m_cut_selectObjects global m_cut_selectObjects
msg=0 msg=verbose
error_msg = "Select in order:\n"+ \ error_msg = "Select in order:\n"+ \
"First, one Object to cut and click 'Select Object' button,\n"+ \ "First, one Object to cut and click 'Select Object' button,\n"+ \
"Second, one cutting Line and click 'Select Cut Line' button,\n"+ \ "Second, one cutting Line and click 'Select Cut Line' button,\n"+ \
@ -10452,7 +10888,8 @@ def cut_selectLine():
""" """
global myDialog global myDialog
global m_cut_selectObjects global m_cut_selectObjects
msg=0 msg=verbose
error_msg = "Select in order:\n"+ \ error_msg = "Select in order:\n"+ \
"First, one Object to cut and click 'Select Object' button,\n"+ \ "First, one Object to cut and click 'Select Object' button,\n"+ \
"Second, one cutting Line and click 'Select Cut Line' button,\n"+ \ "Second, one cutting Line and click 'Select Cut Line' button,\n"+ \
@ -10477,7 +10914,8 @@ def cut_selectPlane():
""" """
global myDialog global myDialog
global m_cut_selectObjects global m_cut_selectObjects
msg=0 msg=verbose
error_msg = "Select in order:\n"+ \ error_msg = "Select in order:\n"+ \
"First, one Object to cut and click 'Select Object' button,\n"+ \ "First, one Object to cut and click 'Select Object' button,\n"+ \
"Second, one cutting Line and click 'Select Cut Line' button,\n"+ \ "Second, one cutting Line and click 'Select Cut Line' button,\n"+ \
@ -10525,6 +10963,7 @@ def plot_cutObject():
global m_thicknessCutObject global m_thicknessCutObject
global verbose global verbose
msg=verbose msg=verbose
createFolders('WorkObjects') createFolders('WorkObjects')
error_msg = "Select in order:\n"+ \ error_msg = "Select in order:\n"+ \
"First, one Object to cut and click 'Select Object' button,\n"+ \ "First, one Object to cut and click 'Select Object' button,\n"+ \
@ -11535,8 +11974,8 @@ def object_highlightCommon():
Original code from : 'JMG, galou and other contributors' 10/2015 Original code from : 'JMG, galou and other contributors' 10/2015
Adapted to WF by : Rentlau_64 10/2015 Adapted to WF by : Rentlau_64 10/2015
""" """
msg=verbose msg=verbose
pass pass
#============================================================================== #==============================================================================
# # -*- coding: utf-8 -*- # # -*- coding: utf-8 -*-
@ -11636,10 +12075,10 @@ def object_clearance():
mindist = App.ActiveDocument.getObject(OBJ1).Shape.distToShape(App.ActiveDocument.getObject(OBJ2).Shape)[0] mindist = App.ActiveDocument.getObject(OBJ1).Shape.distToShape(App.ActiveDocument.getObject(OBJ2).Shape)[0]
print_msg("Distance to Second Object is " + str(mindist) + "\n" ) print_msg("Distance to Second Object is " + str(mindist) + "\n" )
if mindist == 0.0: if mindist == 0.0:
msg = 'POSSIBLE COLLISION DETECTED \n\nCLEARANCE(S) <= 0 \n\nCheck Clearances and Settings !' result = 'POSSIBLE COLLISION DETECTED \n\nCLEARANCE(S) <= 0 \n\nCheck Clearances and Settings !'
else: else:
msg = 'Object CLEARANCE is '+ str(mindist) +' units !' result = 'Object CLEARANCE is '+ str(mindist) +' units !'
print_gui_msg(msg) print_gui_msg(result)
except: except:
printError_msg(error_msg) printError_msg(error_msg)
@ -11756,7 +12195,7 @@ def points_distance():
if msg!=0: if msg!=0:
print_msg("Distance is : " + str(m_dist)) print_msg("Distance is : " + str(m_dist))
msg=\ result=\
"Begin : X1 "+str(pos_X1)+" Y1: "+str(pos_Y1)+" Z1: "+str(pos_Z1)+"\n\n" +\ "Begin : X1 "+str(pos_X1)+" Y1: "+str(pos_Y1)+" Z1: "+str(pos_Z1)+"\n\n" +\
"End : X2 "+str(pos_X2)+" Y2: "+str(pos_Y2)+" Z2: "+str(pos_Z2)+"\n\n" +\ "End : X2 "+str(pos_X2)+" Y2: "+str(pos_Y2)+" Z2: "+str(pos_Z2)+"\n\n" +\
"Delta X : "+str(abs(pos_X1-pos_X2))+"\n" +\ "Delta X : "+str(abs(pos_X1-pos_X2))+"\n" +\
@ -11764,7 +12203,7 @@ def points_distance():
"Delta Z : "+str(abs(pos_Z1-pos_Z2))+"\n\n" +\ "Delta Z : "+str(abs(pos_Z1-pos_Z2))+"\n\n" +\
"Distance : " + str(m_dist) "Distance : " + str(m_dist)
print_gui_msg(msg) print_gui_msg(result)
except: except:
printError_msg(error_msg) printError_msg(error_msg)
@ -11814,7 +12253,7 @@ def line_length():
if hasattr(edge, 'Length'): if hasattr(edge, 'Length'):
m_length = edge.Length m_length = edge.Length
msg=\ result=\
"Begin : X1 "+str(pos_X1)+" Y1: "+str(pos_Y1)+" Z1: "+str(pos_Z1)+"\n\n" +\ "Begin : X1 "+str(pos_X1)+" Y1: "+str(pos_Y1)+" Z1: "+str(pos_Z1)+"\n\n" +\
"End : X2 "+str(pos_X2)+" Y2: "+str(pos_Y2)+" Z2: "+str(pos_Z2)+"\n\n" +\ "End : X2 "+str(pos_X2)+" Y2: "+str(pos_Y2)+" Z2: "+str(pos_Z2)+"\n\n" +\
"Delta X : "+str(abs(pos_X1-pos_X2))+"\n" +\ "Delta X : "+str(abs(pos_X1-pos_X2))+"\n" +\
@ -11823,10 +12262,10 @@ def line_length():
"Distance : " + str(m_dist)+"\n\n" "Distance : " + str(m_dist)+"\n\n"
if m_length: if m_length:
msg+="Length along edge/arc : " + str(m_length) result+="Length along edge/arc : " + str(m_length)
print_gui_msg(msg) print_gui_msg(result)
except: except:
printError_msg(error_msg) printError_msg(error_msg)
@ -11836,7 +12275,6 @@ def object_radius():
Check for Radius: Check for Radius:
""" """
msg=verbose
error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select One Arc!" error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select One Arc!"
Selection = Gui.Selection.getSelectionEx() Selection = Gui.Selection.getSelectionEx()
@ -11920,6 +12358,7 @@ def camera_orientation():
by the function getCameraOrientation(). by the function getCameraOrientation().
""" """
msg=verbose msg=verbose
pl = App.Placement() pl = App.Placement()
pl.Rotation = Gui.ActiveDocument.ActiveView.getCameraOrientation() pl.Rotation = Gui.ActiveDocument.ActiveView.getCameraOrientation()
@ -11931,7 +12370,7 @@ def camera_orientation():
cam=Gui.ActiveDocument.ActiveView.getCameraNode() cam=Gui.ActiveDocument.ActiveView.getCameraNode()
direction = cam.orientation.getValue().multVec(coin.SbVec3f(0,0,1)).getValue() direction = cam.orientation.getValue().multVec(coin.SbVec3f(0,0,1)).getValue()
msg=\ result=\
"___Camera_Orientation____________________"+"\n" +\ "___Camera_Orientation____________________"+"\n" +\
"Radians XYZ Q : " + str(pl.Rotation.Q)+"\n" +\ "Radians XYZ Q : " + str(pl.Rotation.Q)+"\n" +\
"Degrees XYZ : " + str(math.degrees(xP)) + " , " +str(math.degrees(yP)) + " , " + str(math.degrees(zP)) +"\n" +\ "Degrees XYZ : " + str(math.degrees(xP)) + " , " +str(math.degrees(yP)) + " , " + str(math.degrees(zP)) +"\n" +\
@ -11943,7 +12382,7 @@ def camera_orientation():
"Degrees Angle : " + str(math.degrees(pl.Rotation.Angle)) +"\n"+\ "Degrees Angle : " + str(math.degrees(pl.Rotation.Angle)) +"\n"+\
"Direction Vector : " + str (direction) "Direction Vector : " + str (direction)
print_gui_msg(msg) print_gui_msg(result)
def object_common(): def object_common():
@ -12026,7 +12465,6 @@ def object_difference():
""" """
global verbose global verbose
msg=verbose msg=verbose
msg=1
m_actDoc = get_ActiveDocument(info=msg) m_actDoc = get_ActiveDocument(info=msg)
if m_actDoc == None: if m_actDoc == None:
@ -12167,6 +12605,7 @@ def object_align2view_old():
""" """
# revoir le point de rotation # revoir le point de rotation
msg=verbose msg=verbose
error_msg = "INCORRECT Object(s) Selection :\n\nYou Must at least one object !" error_msg = "INCORRECT Object(s) Selection :\n\nYou Must at least one object !"
try: try:
@ -12284,7 +12723,6 @@ def object_copy():
Authors = 2015 Mario52 Authors = 2015 Mario52
""" """
msg=verbose msg=verbose
msg=1
error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select at least one Object !" error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select at least one Object !"
@ -12625,7 +13063,6 @@ def object_alignMainAxis():
- Third and following clicks will rotate by 180 deg the moving objects on first main axes. - Third and following clicks will rotate by 180 deg the moving objects on first main axes.
""" """
msg=verbose msg=verbose
msg=1
try: try:
import numpy as np import numpy as np
@ -13176,8 +13613,9 @@ class WorkFeatureTab():
"button_point_on_line" : "plot_alongLinePoint", "button_point_on_line" : "plot_alongLinePoint",
"button_face_center" : "plot_centerFacePoint", "button_face_center" : "plot_centerFacePoint",
"button_line_face_point" : "plot_lineFacePoint", "button_line_face_point" : "plot_lineFacePoint",
"button_point_face_point" : "plot_pointFacePoint", "button_points_projection" : "plot_projected_points",
"button_point_face_point" : "plot_pointFacePoint",
"button_twolines_point" : "plot_2LinesPoint", "button_twolines_point" : "plot_2LinesPoint",
"button_point_line_point" : "plot_pointLinePoint", "button_point_line_point" : "plot_pointLinePoint",
"button_distPoint" : "plot_distPoint", "button_distPoint" : "plot_distPoint",
@ -13186,10 +13624,11 @@ class WorkFeatureTab():
"button_object_base_point" : "plot_baseObjectPoint", "button_object_base_point" : "plot_baseObjectPoint",
"button_object_center_mass_point": "plot_centerMassObjectPoint", "button_object_center_mass_point": "plot_centerMassObjectPoint",
"button_object_Npoint" : "plot_objectNPoints", "button_object_Npoint" : "plot_objectNPoints",
"button_point_to_sketch" : "point_toSketch",
"button_points_load" : "point_toLoad", "button_points_load" : "point_toLoad",
"button_points_save" : "point_toSave", "button_points_save" : "point_toSave",
"button_points_random" : "plot_points_random", "button_points_random" : "plot_points_random",
"button_point_to_sketch" : "point_toSketch",
"button_object_axis" : "plot_centerObjectAxes", "button_object_axis" : "plot_centerObjectAxes",
"button_twopoints_axis" : "plot_2PointsAxis", "button_twopoints_axis" : "plot_2PointsAxis",
@ -13217,6 +13656,7 @@ class WorkFeatureTab():
"button_points_to_polygon" : "points_toPolygon", "button_points_to_polygon" : "points_toPolygon",
#"button_wire_on_plane" : "plot_wire_on_plane", #"button_wire_on_plane" : "plot_wire_on_plane",
"button_points_to_convex_2Dpolygon" : "Plot_convex2Dpolygon",
"button_4points_bezier" : "plot_4points_bezier", "button_4points_bezier" : "plot_4points_bezier",
"button_linecenter_circle" : "plot_linecenterCircle", "button_linecenter_circle" : "plot_linecenterCircle",
@ -13292,7 +13732,6 @@ class WorkFeatureTab():
"distance_point_on_line" : "distanceLinePoint", "distance_point_on_line" : "distanceLinePoint",
"distance_random_points" : "distanceRandomPoints", "distance_random_points" : "distanceRandomPoints",
"extension_twopoints_axis" : "extensionTwoPointsAxis", "extension_twopoints_axis" : "extensionTwoPointsAxis",
"extension_face_normal" : "extensionFaceNormal", "extension_face_normal" : "extensionFaceNormal",
"extension_line_point_axis" : "extensionLinePointAxis", "extension_line_point_axis" : "extensionLinePointAxis",
@ -13356,6 +13795,8 @@ class WorkFeatureTab():
"point_loc_comboBox" : "sel_attachPoint", "point_loc_comboBox" : "sel_attachPoint",
"transition_comboBox" : "sel_transition", "transition_comboBox" : "sel_transition",
"Image_comboBox_axis_scale" : "sel_imageAxisScale", "Image_comboBox_axis_scale" : "sel_imageAxisScale",
"point_proj_comboBox" : "sel_projection",
"point_proj_comboBox_2" : "sel_projection2",
} }
@ -13424,6 +13865,7 @@ class WorkFeatureTab():
def quit_clicked(self): # quit def quit_clicked(self): # quit
if self.movable: if self.movable:
self.dw.close() self.dw.close()
self.close()
print_msg( "Close done !") print_msg( "Close done !")
return return
else: else:
@ -13446,6 +13888,8 @@ class WorkFeatureTab():
# Create a Surface object and connect # Create a Surface object and connect
self.surface = SurfaceEvents(myObject.ui) self.surface = SurfaceEvents(myObject.ui)
#QtCore.QObject.connect(myObject.ui.button_quit, QtCore.SIGNAL ('clicked()'), myObject.quit_clicked)
def getMainWindow(self): def getMainWindow(self):
""" Returns the main window """ Returns the main window
""" """

View File

@ -229,17 +229,23 @@ class Translation():
self.dup_num = self.gui.ObjTrans_spin self.dup_num = self.gui.ObjTrans_spin
self.dup_deep = self.gui.ObjTrans_deepCopy self.dup_deep = self.gui.ObjTrans_deepCopy
self.slider = self.gui.ObjTrans_horizontalSlider
self.length_edit = self.gui.ObjTrans_lineEdit_length_seg
self.Edge_List = []
self.valid_start = { "Origin" : "origin", self.valid_start = { "Origin" : "origin",
"Base Obj." : "base", "Base Obj." : "base",
"Center Obj.(s)" : "center", "Center Obj.(s)" : "center",
"To select" : "select", "To select" : "select",
"From Segment" : "segment",
"To define" : "define", "To define" : "define",
"Relative" : "relative", "Relative" : "relative",
} }
self.visuObjects = [] self.visuObjects = []
self.internal = False
self.duplicate = False self.duplicate = False
self.deep = False self.deep = False
self.m_num_cpy = 1 self.m_num_cpy = 1
@ -250,8 +256,10 @@ class Translation():
self.dup_deep.setEnabled(False) self.dup_deep.setEnabled(False)
self.dup_deep.setChecked(False) self.dup_deep.setChecked(False)
self.enable(False) self.segment = False
self.enable(False)
self.setEnableSlider(False)
def enable(self, flag=True): def enable(self, flag=True):
""" Enable or not most of the buttons. """ Enable or not most of the buttons.
@ -267,7 +275,6 @@ class Translation():
self.but_reset.setEnabled(flag) self.but_reset.setEnabled(flag)
self.but_apply.setEnabled(flag) self.but_apply.setEnabled(flag)
def setEnabledStartInput(self, flag=True): def setEnabledStartInput(self, flag=True):
""" Enable or not the input boxes for start point. """ Enable or not the input boxes for start point.
""" """
@ -278,7 +285,6 @@ class Translation():
self.start_y.setEnabled(flag) self.start_y.setEnabled(flag)
self.start_z.setEnabled(flag) self.start_z.setEnabled(flag)
def setEnabledEndInput(self, flag=True): def setEnabledEndInput(self, flag=True):
""" Enable or not the input boxes for end point. """ Enable or not the input boxes for end point.
""" """
@ -289,6 +295,14 @@ class Translation():
self.end_y.setEnabled(flag) self.end_y.setEnabled(flag)
self.end_z.setEnabled(flag) self.end_z.setEnabled(flag)
def setEnableSlider(self, flag=True):
""" Enable or not the slider for segment selection.
"""
if self.msg != 0:
func.print_msg("Translation.setEnabledEndInput :")
self.slider.setEnabled(flag)
self.length_edit.setEnabled(flag)
def numberCopies(self,value): def numberCopies(self,value):
""" Respond to the change in number of part value from the spin box. """ Respond to the change in number of part value from the spin box.
@ -319,7 +333,6 @@ class Translation():
self.deep = flag self.deep = flag
def copyFlag(self, flag): def copyFlag(self, flag):
""" Respond to the change of duplicate flag. """ Respond to the change of duplicate flag.
""" """
@ -339,7 +352,6 @@ class Translation():
self.reset() self.reset()
self.preview() self.preview()
def selection(self): def selection(self):
""" Check if one object at least is selected. """ Check if one object at least is selected.
""" """
@ -606,14 +618,36 @@ class Translation():
if self.msg != 0: if self.msg != 0:
func.print_msg("Translation.select_start : Selection of Start point of translation by button !") func.print_msg("Translation.select_start : Selection of Start point of translation by button !")
error_msg = "Select one point !" error_msg = "Select one point or one segment !"
# Get the selected Objects # Get the selected Objects
SelectedObjects = func.get_SelectedObjects() SelectedObjects = func.get_SelectedObjects()
if SelectedObjects == None: if SelectedObjects == None:
func.printError_msg(error_msg) func.printError_msg(error_msg)
return return
Number_of_Points = SelectedObjects[0] Number_of_Points = SelectedObjects[0]
Number_of_Edges = SelectedObjects[1]
if self.segment:
error_msg = "Select one segment only !"
if Number_of_Edges != 1:
func.printError_msg(error_msg)
return
else:
self.Edge_List = SelectedObjects[4]
self.start = self.Edge_List[0].Vertexes[0].Point
self.m_num_end = Number_of_Edges
for m_i_end in range(Number_of_Edges):
self.end.append(self.Edge_List[m_i_end].Vertexes[-1].Point)
button_text = "Selected !"
self.but_start.setText(QtGui.QApplication.translate("Form", button_text, None, QtGui.QApplication.UnicodeUTF8))
self.print_start(self.start)
self.print_end(self.end[0])
self.set_percentage(100.0)
self.visu()
self.preview()
else:
error_msg = "Select one point !"
if Number_of_Points != 1: if Number_of_Points != 1:
func.printError_msg(error_msg) func.printError_msg(error_msg)
return return
@ -641,6 +675,9 @@ class Translation():
self.setEnabledStartInput(False) self.setEnabledStartInput(False)
self.print_start(self.origin) self.print_start(self.origin)
self.set_percentage(100.0)
self.setEnableSlider(False)
self.segment = False
def select_start_type(self, *argc): def select_start_type(self, *argc):
""" Start point of translation by combo box. """ Start point of translation by combo box.
@ -649,14 +686,30 @@ class Translation():
func.print_msg("Translation.select_start_type : Start point of translation by combo box !") func.print_msg("Translation.select_start_type : Start point of translation by combo box !")
self.reset_start_value() self.reset_start_value()
self.reset_end_value()
self.but_end.setEnabled(True)
self.comb_end.setEnabled(True)
if str(*argc) == "To select": if str(*argc) == "To select":
# Activate select button and wait for selection # Activate select button and wait for selection
self.but_start.setEnabled(True) self.but_start.setEnabled(True)
self.setEnableSlider(False)
self.start = None self.start = None
elif str(*argc) == "From Segment":
# Activate select button and wait for selection
self.but_start.setEnabled(True)
self.segment = True
self.setEnableSlider(True)
self.setEnabledStartInput(False)
self.setEnabledEndInput(False)
self.but_end.setEnabled(False)
self.comb_end.setEnabled(False)
self.start = None
elif str(*argc) == "To define": elif str(*argc) == "To define":
# Activate define input boxes and wait for entering values # Activate define input boxes and wait for entering values
self.setEnabledStartInput(True) self.setEnabledStartInput(True)
self.setEnableSlider(False)
self.start = App.Vector(0,0,0) self.start = App.Vector(0,0,0)
else: else:
button_text = "Select" button_text = "Select"
@ -756,6 +809,7 @@ class Translation():
if SelectedObjects == None: if SelectedObjects == None:
func.printError_msg(error_msg) func.printError_msg(error_msg)
return return
Number_of_Points = SelectedObjects[0] Number_of_Points = SelectedObjects[0]
self.m_num_end = Number_of_Points self.m_num_end = Number_of_Points
if Number_of_Points == 0: if Number_of_Points == 0:
@ -950,7 +1004,64 @@ class Translation():
self.comb_start.setCurrentIndex(3) self.comb_start.setCurrentIndex(3)
self.but_end.setEnabled(True) self.but_end.setEnabled(True)
def set_percentage(self, value = 100.0):
""" Put 100 into edit box and on slider.
"""
self.internal = True
self.slider.setValue(value)
self.length_edit.setText(str(value))
self.internal = False
def length_value_changed(self, value):
""" Respond to the change in value of a slider, update the text box
"""
# If the value was changed internally, ignore event.
if self.internal:
return
self.length_edit.setText(str(value))
self.length_value_entered()
def length_value_entered(self):
#if self.msg != 0:
#func.print_msg("angle_value_entered entered!")
try:
# First we check if a valid number have been entered
self.length = float(self.length_edit.text())
if self.length < -1000.0 or self.length > 1000.0 :
func.printError_msg("Length must be valid number in percentage [-1000,1000] !")
self.length_edit.setText(str(100.0))
self.length_value_entered()
# Update the slider by internal update
self.internal = True
self.slider.setValue(self.length)
self.internal = False
if self.segment:
self.start = self.origin
self.end = []
print "length = " +str(self.length)
Number_of_Edges = len(self.Edge_List)
m_id_start = int(0)
m_id_end = int(-1)
m_mult = 1
if self.length < 0.0 :
m_id_start = int(-1)
m_id_end = int(0)
m_mult = -1
self.start = self.Edge_List[0].Vertexes[m_id_start].Point
Vector_A = self.start
for m_i_end in range(Number_of_Edges):
Vector_B = self.Edge_List[m_i_end].Vertexes[m_id_end].Point
distance = Vector_B.sub(Vector_A).Length
distance = ( distance / 100.0 ) * self.length * m_mult
Vector_C = Vector_A.add(Vector_B.sub(Vector_A).normalize().multiply( distance ))
self.end.append(Vector_C)
self.visu()
# Update the view
self.preview()
except ValueError:
func.printError_msg("Length must be valid number in percentage !")
class Rotation(): class Rotation():
""" A rotation object """ A rotation object
@ -1452,7 +1563,9 @@ class TranslationEvents(DefineAndConnectEvents):
DefineAndConnectEvents.__init__(self, self.ui, self.trans) DefineAndConnectEvents.__init__(self, self.ui, self.trans)
def defineEvents(self): def defineEvents(self):
self.connections_for_slider_changed = {} self.connections_for_slider_changed = {
"ObjTrans_horizontalSlider" : "length_value_changed",
}
self.connections_for_button_pressed = { self.connections_for_button_pressed = {
"ObjTrans_button_select" : "initialize", "ObjTrans_button_select" : "initialize",
"ObjTrans_button_select_start" : "select_start", "ObjTrans_button_select_start" : "select_start",
@ -1478,6 +1591,9 @@ class TranslationEvents(DefineAndConnectEvents):
"ObjTrans_end_x" : "end_x_entered", "ObjTrans_end_x" : "end_x_entered",
"ObjTrans_end_y" : "end_y_entered", "ObjTrans_end_y" : "end_y_entered",
"ObjTrans_end_z" : "end_z_entered", "ObjTrans_end_z" : "end_z_entered",
"ObjTrans_lineEdit_length_seg" : "length_value_entered",
} }
#################################################################################### ####################################################################################
@ -1550,6 +1666,26 @@ class ObjectRotationTab():
"ObjTrans_end_z" : "end_z_entered", "ObjTrans_end_z" : "end_z_entered",
} }
# self.connections_for_ObjRot_slider_changed = {
# "ObjRot_horizontalSlider" : "angle_value_changed",
# }
#
# self.connections_for_ObjRot_button_pressed = {
# "ObjRot_button_select" : "initialize",
# "ObjRot_button_select_center" : "select_center",
# "ObjRot_button_select_axis" : "select_axis",
# "ObjRot_button_reset" : "reset",
# "ObjRot_button_apply" : "application",
# }
#
# self.connections_for_ObjRot_combobox_changed = {
# "ObjRot_comboBox_center" : "center_value",
# "ObjRot_comboBox_axis" : "axis_value",
# }
#
# self.connections_for_ObjRot_return_pressed = {
# "ObjRot_lineEdit_angle" : "angle_value_entered",
# }
self.connections_for_button_clicked = { self.connections_for_button_clicked = {
"button_quit" : "quit_clicked", "button_quit" : "quit_clicked",
@ -1560,30 +1696,52 @@ class ObjectRotationTab():
QtCore.QObject.connect(getattr(self.ui, str(m_key)), QtCore.QObject.connect(getattr(self.ui, str(m_key)),
QtCore.SIGNAL("clicked()"),getattr(self,str(m_val))) QtCore.SIGNAL("clicked()"),getattr(self,str(m_val)))
# Connect to Rotation functions
# for m_key, m_val in self.connections_for_ObjRot_button_pressed.items():
# func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.rot, str(m_val))) )
# QtCore.QObject.connect(getattr(self.ui, str(m_key)),
# QtCore.SIGNAL("pressed()"),getattr(self.rot, str(m_val)))
#
# for m_key, m_val in self.connections_for_ObjRot_combobox_changed.items():
# print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.rot, str(m_val))) )
# QtCore.QObject.connect(getattr(self.ui, str(m_key)),
# QtCore.SIGNAL(_fromUtf8("currentIndexChanged(QString)")),getattr(self.rot, str(m_val)))
#
# for m_key, m_val in self.connections_for_ObjRot_slider_changed.items():
# func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.rot, str(m_val))) )
# QtCore.QObject.connect(getattr(self.ui, str(m_key)),
# QtCore.SIGNAL("valueChanged(int)"),getattr(self.rot, str(m_val)))
#
# for m_key, m_val in self.connections_for_ObjRot_return_pressed.items():
# func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.rot, str(m_val))) )
# QtCore.QObject.connect(getattr(self.ui, str(m_key)),
# QtCore.SIGNAL("returnPressed()"),getattr(self.rot, str(m_val)))
# Connect to Translation functions # Connect to Translation functions
for m_key, m_val in self.connections_for_ObjTrans_button_pressed.items(): for m_key, m_val in self.connections_for_ObjTrans_button_pressed.items():
#func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) ) func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) )
QtCore.QObject.connect(getattr(self.ui, str(m_key)), QtCore.QObject.connect(getattr(self.ui, str(m_key)),
QtCore.SIGNAL("pressed()"),getattr(self.trans, str(m_val))) QtCore.SIGNAL("pressed()"),getattr(self.trans, str(m_val)))
for m_key, m_val in self.connections_for_ObjTrans_combobox_changed.items(): for m_key, m_val in self.connections_for_ObjTrans_combobox_changed.items():
#func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) ) func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) )
QtCore.QObject.connect(getattr(self.ui, str(m_key)), QtCore.QObject.connect(getattr(self.ui, str(m_key)),
QtCore.SIGNAL(_fromUtf8("currentIndexChanged(QString)")),getattr(self.trans, str(m_val))) QtCore.SIGNAL(_fromUtf8("currentIndexChanged(QString)")),getattr(self.trans, str(m_val)))
for m_key, m_val in self.connections_for_ObjTrans_checkbox_toggled.items(): for m_key, m_val in self.connections_for_ObjTrans_checkbox_toggled.items():
#func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) ) #print_msg( "Connecting : " + str(m_key) + " and " + str(m_val) )
func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) )
QtCore.QObject.connect(getattr(self.ui, str(m_key)), QtCore.QObject.connect(getattr(self.ui, str(m_key)),
QtCore.SIGNAL(_fromUtf8("toggled(bool)")),getattr(self.trans, str(m_val))) QtCore.SIGNAL(_fromUtf8("toggled(bool)")),getattr(self.trans, str(m_val)))
for m_key, m_val in self.connections_for_ObjTrans_spin_changed.items(): for m_key, m_val in self.connections_for_ObjTrans_spin_changed.items():
#func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) ) func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) )
QtCore.QObject.connect(getattr(self.ui, str(m_key)), QtCore.QObject.connect(getattr(self.ui, str(m_key)),
QtCore.SIGNAL("valueChanged(int)"),getattr(self.trans, str(m_val))) QtCore.SIGNAL("valueChanged(int)"),getattr(self.trans, str(m_val)))
for m_key, m_val in self.connections_for_ObjTrans_return_pressed.items(): for m_key, m_val in self.connections_for_ObjTrans_return_pressed.items():
#func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) ) func.print_msg( "Connecting : " + str(getattr(self.ui, str(m_key))) + " and " + str(getattr(self.trans, str(m_val))) )
QtCore.QObject.connect(getattr(self.ui, str(m_key)), QtCore.QObject.connect(getattr(self.ui, str(m_key)),
QtCore.SIGNAL("returnPressed()"),getattr(self.trans, str(m_val))) QtCore.SIGNAL("returnPressed()"),getattr(self.trans, str(m_val)))