summaryrefslogtreecommitdiffstats
path: root/kpovmodeler
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit47d455dd55be855e4cc691c32f687f723d9247ee (patch)
tree52e236aaa2576bdb3840ebede26619692fed6d7d /kpovmodeler
downloadtdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.tar.gz
tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdegraphics@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kpovmodeler')
-rw-r--r--kpovmodeler/AUTHORS13
-rw-r--r--kpovmodeler/BUGS5
-rw-r--r--kpovmodeler/COPYING341
-rw-r--r--kpovmodeler/ChangeLog83
-rw-r--r--kpovmodeler/INSTALL167
-rw-r--r--kpovmodeler/Makefile.am251
-rw-r--r--kpovmodeler/README3
-rw-r--r--kpovmodeler/REQUIREMENTS19
-rw-r--r--kpovmodeler/StyleConvention225
-rw-r--r--kpovmodeler/TODO52
-rw-r--r--kpovmodeler/baseinsertrules.xml1039
-rw-r--r--kpovmodeler/configure.in.bot37
-rw-r--r--kpovmodeler/configure.in.in60
-rw-r--r--kpovmodeler/cr16-mime-kpovmodeler_doc.pngbin0 -> 684 bytes
-rw-r--r--kpovmodeler/cr32-mime-kpovmodeler_doc.pngbin0 -> 1464 bytes
-rw-r--r--kpovmodeler/cr48-mime-kpovmodeler_doc.pngbin0 -> 2258 bytes
-rw-r--r--kpovmodeler/examples/Makefile.am1
-rw-r--r--kpovmodeler/examples/includes/Makefile.am1
-rw-r--r--kpovmodeler/examples/includes/inlined/Makefile.am4
-rw-r--r--kpovmodeler/examples/includes/inlined/chars.kpmbin0 -> 3354 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/finish.kpmbin0 -> 937 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/glass.kpm141
-rw-r--r--kpovmodeler/examples/includes/inlined/golds.kpmbin0 -> 1140 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/metals.kpmbin0 -> 2748 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/shapes.kpmbin0 -> 1462 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/shapes2.kpmbin0 -> 1541 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/shapesq.kpmbin0 -> 3039 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/skies.kpmbin0 -> 2229 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/stars.kpmbin0 -> 1285 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/stones1.kpmbin0 -> 9383 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/stones2.kpmbin0 -> 3659 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/textures.kpmbin0 -> 7361 bytes
-rw-r--r--kpovmodeler/examples/includes/inlined/woods.kpmbin0 -> 7129 bytes
-rw-r--r--kpovmodeler/examples/includes/original/Makefile.am4
-rw-r--r--kpovmodeler/examples/includes/original/chars.kpmbin0 -> 3083 bytes
-rw-r--r--kpovmodeler/examples/includes/original/finish.kpmbin0 -> 937 bytes
-rw-r--r--kpovmodeler/examples/includes/original/glass.kpmbin0 -> 1237 bytes
-rw-r--r--kpovmodeler/examples/includes/original/golds.kpmbin0 -> 1166 bytes
-rw-r--r--kpovmodeler/examples/includes/original/metals.kpmbin0 -> 3359 bytes
-rw-r--r--kpovmodeler/examples/includes/original/shapes.kpmbin0 -> 1462 bytes
-rw-r--r--kpovmodeler/examples/includes/original/shapes2.kpmbin0 -> 1541 bytes
-rw-r--r--kpovmodeler/examples/includes/original/shapesq.kpmbin0 -> 3045 bytes
-rw-r--r--kpovmodeler/examples/includes/original/skies.kpmbin0 -> 1981 bytes
-rw-r--r--kpovmodeler/examples/includes/original/stars.kpmbin0 -> 1285 bytes
-rw-r--r--kpovmodeler/examples/includes/original/stones1.kpmbin0 -> 7777 bytes
-rw-r--r--kpovmodeler/examples/includes/original/stones2.kpmbin0 -> 3659 bytes
-rw-r--r--kpovmodeler/examples/includes/original/textures.kpmbin0 -> 7317 bytes
-rw-r--r--kpovmodeler/examples/includes/original/woods.kpmbin0 -> 5539 bytes
-rw-r--r--kpovmodeler/examples/scenes/Makefile.am1
-rw-r--r--kpovmodeler/examples/scenes/advanced/Makefile.am2
-rw-r--r--kpovmodeler/examples/scenes/advanced/ants.kpmbin0 -> 5229 bytes
-rw-r--r--kpovmodeler/examples/scenes/advanced/bee.kpmbin0 -> 3052 bytes
-rw-r--r--kpovmodeler/examples/scenes/advanced/ink.kpmbin0 -> 3251 bytes
-rw-r--r--kpovmodeler/examples/scenes/advanced/table.kpmbin0 -> 4961 bytes
-rw-r--r--kpovmodeler/examples/scenes/csg/Makefile.am2
-rw-r--r--kpovmodeler/examples/scenes/csg/cheese.kpmbin0 -> 2642 bytes
-rw-r--r--kpovmodeler/examples/scenes/csg/emptybox.kpmbin0 -> 1952 bytes
-rw-r--r--kpovmodeler/examples/scenes/csg/heightfield.kpmbin0 -> 1321 bytes
-rw-r--r--kpovmodeler/examples/scenes/interior/Makefile.am2
-rw-r--r--kpovmodeler/examples/scenes/interior/cubes.kpmbin0 -> 1273 bytes
-rw-r--r--kpovmodeler/examples/scenes/interior/media1.kpmbin0 -> 1151 bytes
-rw-r--r--kpovmodeler/examples/scenes/interior/media2.kpmbin0 -> 1467 bytes
-rw-r--r--kpovmodeler/examples/scenes/interior/media3.kpmbin0 -> 1737 bytes
-rw-r--r--kpovmodeler/examples/scenes/interior/spheres.kpmbin0 -> 1247 bytes
-rw-r--r--kpovmodeler/examples/scenes/lights/Makefile.am2
-rw-r--r--kpovmodeler/examples/scenes/lights/arealight.kpmbin0 -> 1142 bytes
-rw-r--r--kpovmodeler/examples/scenes/lights/arealight2.kpmbin0 -> 1148 bytes
-rw-r--r--kpovmodeler/examples/scenes/lights/spotlight.kpmbin0 -> 1117 bytes
-rw-r--r--kpovmodeler/examples/scenes/objects/Makefile.am3
-rw-r--r--kpovmodeler/examples/scenes/objects/allobjects.kpmbin0 -> 2413 bytes
-rw-r--r--kpovmodeler/examples/scenes/objects/fractals.kpmbin0 -> 1143 bytes
-rw-r--r--kpovmodeler/examples/scenes/objects/lathe.kpmbin0 -> 1122 bytes
-rw-r--r--kpovmodeler/examples/scenes/objects/prism.kpmbin0 -> 1359 bytes
-rw-r--r--kpovmodeler/examples/scenes/objects/sor.kpmbin0 -> 1764 bytes
-rw-r--r--kpovmodeler/examples/scenes/objects/superellipsoid.kpmbin0 -> 1242 bytes
-rw-r--r--kpovmodeler/examples/scenes/objects/text.kpmbin0 -> 1124 bytes
-rw-r--r--kpovmodeler/hi16-app-kpovmodeler.pngbin0 -> 815 bytes
-rw-r--r--kpovmodeler/hi22-app-kpovmodeler.pngbin0 -> 1149 bytes
-rw-r--r--kpovmodeler/hi32-app-kpovmodeler.pngbin0 -> 1891 bytes
-rw-r--r--kpovmodeler/hi48-app-kpovmodeler.pngbin0 -> 3163 bytes
-rw-r--r--kpovmodeler/kdoc.rules10
-rw-r--r--kpovmodeler/kpovmodeler.desktop59
-rw-r--r--kpovmodeler/kpovmodelerbrowser.rc21
-rw-r--r--kpovmodeler/kpovmodelershell.rc58
-rw-r--r--kpovmodeler/kpovmodelerui.rc303
-rw-r--r--kpovmodeler/main.cpp69
-rw-r--r--kpovmodeler/pics/Makefile.am1
-rw-r--r--kpovmodeler/pics/crystalsvg/Makefile.am2
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmaddpoint.pngbin0 -> 262 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmaddpointabove.pngbin0 -> 226 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmaddsubprism.pngbin0 -> 260 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmbicubicpatch.pngbin0 -> 398 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmblendmapmodifiers.pngbin0 -> 608 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmblob.pngbin0 -> 514 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmblobcylinder.pngbin0 -> 474 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmblobsphere.pngbin0 -> 443 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmboundedby.pngbin0 -> 398 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmbox.pngbin0 -> 270 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmbumpmap.pngbin0 -> 681 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmcamera.pngbin0 -> 244 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmclippedby.pngbin0 -> 387 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmcolorlist.pngbin0 -> 169 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmcolormap.pngbin0 -> 360 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmcolormapdeclare.pngbin0 -> 350 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmcomment.pngbin0 -> 209 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmcone.pngbin0 -> 374 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmcylinder.pngbin0 -> 337 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdeclare.pngbin0 -> 451 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdensity.pngbin0 -> 530 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdensitydeclare.pngbin0 -> 485 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdensitylist.pngbin0 -> 544 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdensitymap.pngbin0 -> 586 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdensitymapdeclare.pngbin0 -> 519 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdialogview.pngbin0 -> 576 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdifference.pngbin0 -> 271 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdisc.pngbin0 -> 355 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmdrag.pngbin0 -> 276 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmfinish.pngbin0 -> 240 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmfinishdeclare.pngbin0 -> 265 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmfog.pngbin0 -> 524 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmfogdeclare.pngbin0 -> 477 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmglobalphotons.pngbin0 -> 589 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmglobalsettings.pngbin0 -> 736 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmglview.pngbin0 -> 549 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmheightfield.pngbin0 -> 385 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmimagemap.pngbin0 -> 758 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pminserterrors.pngbin0 -> 246 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pminsertfirstchild.pngbin0 -> 226 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pminsertlastchild.pngbin0 -> 229 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pminsertsibling.pngbin0 -> 233 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pminterior.pngbin0 -> 279 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pminteriordeclare.pngbin0 -> 253 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pminteriortexture.pngbin0 -> 449 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pminteriortexturedeclare.pngbin0 -> 376 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmintersection.pngbin0 -> 269 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmisosurface.pngbin0 -> 411 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmjuliafractal.pngbin0 -> 468 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmlathe.pngbin0 -> 445 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmlight.pngbin0 -> 419 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmlightgroup.pngbin0 -> 440 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmlistpattern.pngbin0 -> 405 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmlookslike.pngbin0 -> 385 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmmaterial.pngbin0 -> 461 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmmaterialdeclare.pngbin0 -> 407 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmmaterialmap.pngbin0 -> 699 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmmatrix.pngbin0 -> 565 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmmedia.pngbin0 -> 388 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmmediadeclare.pngbin0 -> 376 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmmerge.pngbin0 -> 281 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmmesh.pngbin0 -> 360 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmnormal.pngbin0 -> 539 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmnormaldeclare.pngbin0 -> 481 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmnormallist.pngbin0 -> 556 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmnormalmap.pngbin0 -> 516 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmnormalmapdeclare.pngbin0 -> 456 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmobjectdeclare.pngbin0 -> 420 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmobjectlink.pngbin0 -> 476 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmpattern.pngbin0 -> 710 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmphotons.pngbin0 -> 513 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmpigment.pngbin0 -> 334 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentdeclare.pngbin0 -> 361 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentlist.pngbin0 -> 442 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentmap.pngbin0 -> 487 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentmapdeclare.pngbin0 -> 454 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmplane.pngbin0 -> 483 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmpolynom.pngbin0 -> 371 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmprism.pngbin0 -> 322 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmprojectedthrough.pngbin0 -> 422 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmquickcolor.pngbin0 -> 220 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmradiosity.pngbin0 -> 534 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmrainbow.pngbin0 -> 318 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmrainbowdeclare.pngbin0 -> 307 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmraw.pngbin0 -> 193 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmremovepoint.pngbin0 -> 170 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmrender.pngbin0 -> 442 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmrenderpreview.pngbin0 -> 451 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmrendersettings.pngbin0 -> 595 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmrotate.pngbin0 -> 282 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmscale.pngbin0 -> 209 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmscene.pngbin0 -> 725 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmskysphere.pngbin0 -> 614 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmskyspheredeclare.pngbin0 -> 560 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmslope.pngbin0 -> 364 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmslopemap.pngbin0 -> 396 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmslopemapdeclare.pngbin0 -> 342 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmsolidcolor.pngbin0 -> 178 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmsor.pngbin0 -> 425 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmsphere.pngbin0 -> 467 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmspheresweep.pngbin0 -> 540 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmsqe.pngbin0 -> 495 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtext.pngbin0 -> 248 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtexture.pngbin0 -> 610 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtexturedeclare.pngbin0 -> 544 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtexturelist.pngbin0 -> 617 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtexturemap.pngbin0 -> 603 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtexturemapdeclare.pngbin0 -> 546 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtorus.pngbin0 -> 498 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtranslate.pngbin0 -> 231 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtreeview.pngbin0 -> 539 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmtriangle.pngbin0 -> 252 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmunion.pngbin0 -> 312 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr16-action-pmwarp.pngbin0 -> 686 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmbicubicpatch.pngbin0 -> 521 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmblendmapmodifiers.pngbin0 -> 975 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmblob.pngbin0 -> 845 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmblobcylinder.pngbin0 -> 796 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmblobsphere.pngbin0 -> 617 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmboundedby.pngbin0 -> 432 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmbox.pngbin0 -> 302 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmbumpmap.pngbin0 -> 1206 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmcamera.pngbin0 -> 525 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmclippedby.pngbin0 -> 477 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmcolorlist.pngbin0 -> 218 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmcolormap.pngbin0 -> 573 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmcolormapdeclare.pngbin0 -> 518 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmcomment.pngbin0 -> 343 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmcone.pngbin0 -> 396 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfigurecolors.pngbin0 -> 883 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguredialogview.pngbin0 -> 392 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguregraphicalview.pngbin0 -> 652 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguregrid.pngbin0 -> 553 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureobjectlibrary.pngbin0 -> 500 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureobjects.pngbin0 -> 710 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureopengl.pngbin0 -> 519 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfigurepovray.pngbin0 -> 1080 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguretexturepreview.pngbin0 -> 765 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureviewlayout.pngbin0 -> 410 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmcylinder.pngbin0 -> 384 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdeclare.pngbin0 -> 702 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdensity.pngbin0 -> 1147 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdensitydeclare.pngbin0 -> 683 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdensitylist.pngbin0 -> 809 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdensitymap.pngbin0 -> 900 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdensitymapdeclare.pngbin0 -> 764 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdifference.pngbin0 -> 430 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdisc.pngbin0 -> 527 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmdrag.pngbin0 -> 369 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmfinish.pngbin0 -> 299 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmfinishdeclare.pngbin0 -> 338 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmfog.pngbin0 -> 827 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmfogdeclare.pngbin0 -> 725 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmglobalphotons.pngbin0 -> 962 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmglobalsettings.pngbin0 -> 904 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmheightfield.pngbin0 -> 487 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmimagemap.pngbin0 -> 1344 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pminserterrors.pngbin0 -> 483 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pminterior.pngbin0 -> 277 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pminteriordeclare.pngbin0 -> 255 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pminteriortexture.pngbin0 -> 656 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pminteriortexturedeclare.pngbin0 -> 535 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmintersection.pngbin0 -> 372 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmisosurface.pngbin0 -> 730 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmjuliafractal.pngbin0 -> 718 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmlathe.pngbin0 -> 654 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmlight.pngbin0 -> 438 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmlightgroup.pngbin0 -> 709 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmlistpattern.pngbin0 -> 367 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmlookslike.pngbin0 -> 347 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmmaterial.pngbin0 -> 675 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmmaterialdeclare.pngbin0 -> 563 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmmaterialmap.pngbin0 -> 1243 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmmatrix.pngbin0 -> 290 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmmedia.pngbin0 -> 416 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmmediadeclare.pngbin0 -> 405 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmmerge.pngbin0 -> 489 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmmesh.pngbin0 -> 576 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmnormal.pngbin0 -> 844 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmnormaldeclare.pngbin0 -> 741 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmnormallist.pngbin0 -> 845 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmnormalmap.pngbin0 -> 804 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmnormalmapdeclare.pngbin0 -> 700 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmobjectdeclare.pngbin0 -> 643 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmobjectlink.pngbin0 -> 806 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmpattern.pngbin0 -> 1246 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmphotons.pngbin0 -> 631 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmpigment.pngbin0 -> 305 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentdeclare.pngbin0 -> 377 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentlist.pngbin0 -> 492 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentmap.pngbin0 -> 737 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentmapdeclare.pngbin0 -> 660 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmplane.pngbin0 -> 495 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmpolynom.pngbin0 -> 498 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmprism.pngbin0 -> 423 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmprojectedthrough.pngbin0 -> 420 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmquickcolor.pngbin0 -> 225 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmradiosity.pngbin0 -> 428 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmrainbow.pngbin0 -> 576 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmrainbowdeclare.pngbin0 -> 558 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmraw.pngbin0 -> 271 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmrender.pngbin0 -> 637 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmrenderpreview.pngbin0 -> 648 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmrendersettings.pngbin0 -> 693 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmrotate.pngbin0 -> 272 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmscale.pngbin0 -> 383 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmscene.pngbin0 -> 791 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmskysphere.pngbin0 -> 914 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmskyspheredeclare.pngbin0 -> 768 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmslope.pngbin0 -> 312 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmslopemap.pngbin0 -> 555 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmslopemapdeclare.pngbin0 -> 493 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmsolidcolor.pngbin0 -> 255 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmsor.pngbin0 -> 629 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmsphere.pngbin0 -> 592 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmspheresweep.pngbin0 -> 618 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmsqe.pngbin0 -> 713 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtext.pngbin0 -> 284 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtexture.pngbin0 -> 977 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtexturedeclare.pngbin0 -> 852 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtexturelist.pngbin0 -> 960 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtexturemap.pngbin0 -> 939 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtexturemapdeclare.pngbin0 -> 800 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtorus.pngbin0 -> 677 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtranslate.pngbin0 -> 463 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmtriangle.pngbin0 -> 455 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmunion.pngbin0 -> 554 bytes
-rw-r--r--kpovmodeler/pics/crystalsvg/cr22-action-pmwarp.pngbin0 -> 1011 bytes
-rw-r--r--kpovmodeler/pics/locolor/Makefile.am2
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmaddpoint.pngbin0 -> 262 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmaddpointabove.pngbin0 -> 226 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmaddsubprism.pngbin0 -> 186 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmbicubicpatch.pngbin0 -> 373 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmblendmapmodifiers.pngbin0 -> 520 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmblob.pngbin0 -> 396 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmblobcylinder.pngbin0 -> 212 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmblobsphere.pngbin0 -> 436 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmboundedby.pngbin0 -> 296 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmbox.pngbin0 -> 251 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmbumpmap.pngbin0 -> 299 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmcamera.pngbin0 -> 244 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmclippedby.pngbin0 -> 277 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmcomment.pngbin0 -> 209 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmcone.pngbin0 -> 466 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmcylinder.pngbin0 -> 341 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdeclare.pngbin0 -> 327 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdensity.pngbin0 -> 398 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdensitydeclare.pngbin0 -> 354 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdensitylist.pngbin0 -> 376 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdensitymap.pngbin0 -> 379 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdensitymapdeclare.pngbin0 -> 373 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdifference.pngbin0 -> 271 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdisc.pngbin0 -> 394 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmdrag.pngbin0 -> 276 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmfog.pngbin0 -> 329 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmfogdeclare.pngbin0 -> 384 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmglobalsettings.pngbin0 -> 509 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmheightfield.pngbin0 -> 288 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmimagemap.pngbin0 -> 458 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pminserterrors.pngbin0 -> 246 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pminsertfirstchild.pngbin0 -> 226 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pminsertlastchild.pngbin0 -> 229 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pminsertsibling.pngbin0 -> 233 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmintersection.pngbin0 -> 269 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmjuliafractal.pngbin0 -> 313 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmlathe.pngbin0 -> 237 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmlight.pngbin0 -> 297 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmlistpattern.pngbin0 -> 359 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmlookslike.pngbin0 -> 203 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmmaterialmap.pngbin0 -> 341 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmmatrix.pngbin0 -> 200 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmmerge.pngbin0 -> 281 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmobjectdeclare.pngbin0 -> 420 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmobjectlink.pngbin0 -> 476 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmpigment.pngbin0 -> 344 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmpigmentdeclare.pngbin0 -> 364 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmplane.pngbin0 -> 427 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmpolynom.pngbin0 -> 233 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmprism.pngbin0 -> 217 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmquickcolor.pngbin0 -> 205 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmrainbow.pngbin0 -> 354 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmrainbowdeclare.pngbin0 -> 337 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmraw.pngbin0 -> 193 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmremovepoint.pngbin0 -> 170 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmrender.pngbin0 -> 363 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmrenderpreview.pngbin0 -> 382 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmrendersettings.pngbin0 -> 501 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmrotate.pngbin0 -> 282 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmscale.pngbin0 -> 209 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmscene.pngbin0 -> 559 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmskysphere.pngbin0 -> 384 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmskyspheredeclare.pngbin0 -> 368 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmsolidcolor.pngbin0 -> 382 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmsor.pngbin0 -> 311 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmsphere.pngbin0 -> 363 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmsqr.pngbin0 -> 289 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmtext.pngbin0 -> 208 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmtexture.pngbin0 -> 502 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmtexturedeclare.pngbin0 -> 464 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmtorus.pngbin0 -> 399 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmtranslate.pngbin0 -> 231 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmtriangle.pngbin0 -> 324 bytes
-rw-r--r--kpovmodeler/pics/locolor/lo16-action-pmunion.pngbin0 -> 312 bytes
-rw-r--r--kpovmodeler/pm2dcontrolpoint.cpp207
-rw-r--r--kpovmodeler/pm2dcontrolpoint.h135
-rw-r--r--kpovmodeler/pm3dcontrolpoint.cpp49
-rw-r--r--kpovmodeler/pm3dcontrolpoint.h68
-rw-r--r--kpovmodeler/pmactions.cpp254
-rw-r--r--kpovmodeler/pmactions.h106
-rw-r--r--kpovmodeler/pmaddcommand.cpp233
-rw-r--r--kpovmodeler/pmaddcommand.h87
-rw-r--r--kpovmodeler/pmallcommands.h27
-rw-r--r--kpovmodeler/pmalledits.h25
-rw-r--r--kpovmodeler/pmallobjects.h106
-rw-r--r--kpovmodeler/pmbicubicpatch.cpp544
-rw-r--r--kpovmodeler/pmbicubicpatch.h188
-rw-r--r--kpovmodeler/pmbicubicpatchedit.cpp218
-rw-r--r--kpovmodeler/pmbicubicpatchedit.h80
-rw-r--r--kpovmodeler/pmblendmapmodifiers.cpp284
-rw-r--r--kpovmodeler/pmblendmapmodifiers.h129
-rw-r--r--kpovmodeler/pmblendmapmodifiersedit.cpp261
-rw-r--r--kpovmodeler/pmblendmapmodifiersedit.h100
-rw-r--r--kpovmodeler/pmblob.cpp175
-rw-r--r--kpovmodeler/pmblob.h113
-rw-r--r--kpovmodeler/pmblobcylinder.cpp468
-rw-r--r--kpovmodeler/pmblobcylinder.h181
-rw-r--r--kpovmodeler/pmblobcylinderedit.cpp114
-rw-r--r--kpovmodeler/pmblobcylinderedit.h61
-rw-r--r--kpovmodeler/pmblobedit.cpp96
-rw-r--r--kpovmodeler/pmblobedit.h65
-rw-r--r--kpovmodeler/pmblobsphere.cpp391
-rw-r--r--kpovmodeler/pmblobsphere.h168
-rw-r--r--kpovmodeler/pmblobsphereedit.cpp102
-rw-r--r--kpovmodeler/pmblobsphereedit.h63
-rw-r--r--kpovmodeler/pmboundedby.cpp114
-rw-r--r--kpovmodeler/pmboundedby.h89
-rw-r--r--kpovmodeler/pmboundedbyedit.cpp65
-rw-r--r--kpovmodeler/pmboundedbyedit.h59
-rw-r--r--kpovmodeler/pmbox.cpp276
-rw-r--r--kpovmodeler/pmbox.h123
-rw-r--r--kpovmodeler/pmboxedit.cpp86
-rw-r--r--kpovmodeler/pmboxedit.h63
-rw-r--r--kpovmodeler/pmbumpmap.cpp384
-rw-r--r--kpovmodeler/pmbumpmap.h172
-rw-r--r--kpovmodeler/pmbumpmapedit.cpp319
-rw-r--r--kpovmodeler/pmbumpmapedit.h86
-rw-r--r--kpovmodeler/pmcamera.cpp769
-rw-r--r--kpovmodeler/pmcamera.h292
-rw-r--r--kpovmodeler/pmcameraedit.cpp439
-rw-r--r--kpovmodeler/pmcameraedit.h99
-rw-r--r--kpovmodeler/pmclippedby.cpp114
-rw-r--r--kpovmodeler/pmclippedby.h88
-rw-r--r--kpovmodeler/pmclippedbyedit.cpp65
-rw-r--r--kpovmodeler/pmclippedbyedit.h59
-rw-r--r--kpovmodeler/pmcolor.cpp196
-rw-r--r--kpovmodeler/pmcolor.h130
-rw-r--r--kpovmodeler/pmcoloredit.cpp201
-rw-r--r--kpovmodeler/pmcoloredit.h83
-rw-r--r--kpovmodeler/pmcolorsettings.cpp163
-rw-r--r--kpovmodeler/pmcolorsettings.h58
-rw-r--r--kpovmodeler/pmcommand.h146
-rw-r--r--kpovmodeler/pmcommandmanager.cpp99
-rw-r--r--kpovmodeler/pmcommandmanager.h118
-rw-r--r--kpovmodeler/pmcomment.cpp174
-rw-r--r--kpovmodeler/pmcomment.h92
-rw-r--r--kpovmodeler/pmcommentedit.cpp75
-rw-r--r--kpovmodeler/pmcommentedit.h62
-rw-r--r--kpovmodeler/pmcompositeobject.cpp396
-rw-r--r--kpovmodeler/pmcompositeobject.h198
-rw-r--r--kpovmodeler/pmcone.cpp451
-rw-r--r--kpovmodeler/pmcone.h188
-rw-r--r--kpovmodeler/pmconeedit.cpp119
-rw-r--r--kpovmodeler/pmconeedit.h64
-rw-r--r--kpovmodeler/pmcontrolpoint.cpp99
-rw-r--r--kpovmodeler/pmcontrolpoint.h190
-rw-r--r--kpovmodeler/pmcsg.cpp200
-rw-r--r--kpovmodeler/pmcsg.h105
-rw-r--r--kpovmodeler/pmcsgedit.cpp118
-rw-r--r--kpovmodeler/pmcsgedit.h63
-rw-r--r--kpovmodeler/pmcylinder.cpp407
-rw-r--r--kpovmodeler/pmcylinder.h176
-rw-r--r--kpovmodeler/pmcylinderedit.cpp113
-rw-r--r--kpovmodeler/pmcylinderedit.h63
-rw-r--r--kpovmodeler/pmdatachangecommand.cpp111
-rw-r--r--kpovmodeler/pmdatachangecommand.h68
-rw-r--r--kpovmodeler/pmdebug.h26
-rw-r--r--kpovmodeler/pmdeclare.cpp238
-rw-r--r--kpovmodeler/pmdeclare.h147
-rw-r--r--kpovmodeler/pmdeclareedit.cpp206
-rw-r--r--kpovmodeler/pmdeclareedit.h74
-rw-r--r--kpovmodeler/pmdefaults.h131
-rw-r--r--kpovmodeler/pmdeletecommand.cpp281
-rw-r--r--kpovmodeler/pmdeletecommand.h126
-rw-r--r--kpovmodeler/pmdensity.cpp76
-rw-r--r--kpovmodeler/pmdensity.h76
-rw-r--r--kpovmodeler/pmdensityedit.cpp44
-rw-r--r--kpovmodeler/pmdensityedit.h58
-rw-r--r--kpovmodeler/pmdetailobject.cpp151
-rw-r--r--kpovmodeler/pmdetailobject.h115
-rw-r--r--kpovmodeler/pmdetailobjectedit.cpp122
-rw-r--r--kpovmodeler/pmdetailobjectedit.h68
-rw-r--r--kpovmodeler/pmdialogeditbase.cpp558
-rw-r--r--kpovmodeler/pmdialogeditbase.h356
-rw-r--r--kpovmodeler/pmdialogview.cpp441
-rw-r--r--kpovmodeler/pmdialogview.h163
-rw-r--r--kpovmodeler/pmdisc.cpp440
-rw-r--r--kpovmodeler/pmdisc.h180
-rw-r--r--kpovmodeler/pmdiscedit.cpp147
-rw-r--r--kpovmodeler/pmdiscedit.h67
-rw-r--r--kpovmodeler/pmdistancecontrolpoint.cpp92
-rw-r--r--kpovmodeler/pmdistancecontrolpoint.h110
-rw-r--r--kpovmodeler/pmdockwidget.cpp2549
-rw-r--r--kpovmodeler/pmdockwidget.h1478
-rw-r--r--kpovmodeler/pmdockwidget_private.cpp372
-rw-r--r--kpovmodeler/pmdockwidget_private.h142
-rw-r--r--kpovmodeler/pmdocumentationmap.cpp193
-rw-r--r--kpovmodeler/pmdocumentationmap.h138
-rw-r--r--kpovmodeler/pmdocumentformat.h26
-rw-r--r--kpovmodeler/pmdragwidget.cpp49
-rw-r--r--kpovmodeler/pmdragwidget.h51
-rw-r--r--kpovmodeler/pmenumproperty.cpp57
-rw-r--r--kpovmodeler/pmenumproperty.h110
-rw-r--r--kpovmodeler/pmerrordialog.cpp136
-rw-r--r--kpovmodeler/pmerrordialog.h73
-rw-r--r--kpovmodeler/pmerrorflags.h31
-rw-r--r--kpovmodeler/pmface.cpp119
-rw-r--r--kpovmodeler/pmface.h130
-rw-r--r--kpovmodeler/pmfactory.cpp102
-rw-r--r--kpovmodeler/pmfactory.h48
-rw-r--r--kpovmodeler/pmfiledialog.cpp104
-rw-r--r--kpovmodeler/pmfiledialog.h60
-rw-r--r--kpovmodeler/pmfinish.cpp765
-rw-r--r--kpovmodeler/pmfinish.h208
-rw-r--r--kpovmodeler/pmfinishedit.cpp474
-rw-r--r--kpovmodeler/pmfinishedit.h122
-rw-r--r--kpovmodeler/pmfog.cpp347
-rw-r--r--kpovmodeler/pmfog.h129
-rw-r--r--kpovmodeler/pmfogedit.cpp240
-rw-r--r--kpovmodeler/pmfogedit.h95
-rw-r--r--kpovmodeler/pmformulalabel.cpp190
-rw-r--r--kpovmodeler/pmformulalabel.h69
-rw-r--r--kpovmodeler/pmglobalphotons.cpp521
-rw-r--r--kpovmodeler/pmglobalphotons.h284
-rw-r--r--kpovmodeler/pmglobalphotonsedit.cpp328
-rw-r--r--kpovmodeler/pmglobalphotonsedit.h98
-rw-r--r--kpovmodeler/pmglobals.h29
-rw-r--r--kpovmodeler/pmglobalsettings.cpp516
-rw-r--r--kpovmodeler/pmglobalsettings.h268
-rw-r--r--kpovmodeler/pmglobalsettingsedit.cpp317
-rw-r--r--kpovmodeler/pmglobalsettingsedit.h93
-rw-r--r--kpovmodeler/pmglview.cpp1853
-rw-r--r--kpovmodeler/pmglview.h589
-rw-r--r--kpovmodeler/pmgraphicalobject.cpp248
-rw-r--r--kpovmodeler/pmgraphicalobject.h141
-rw-r--r--kpovmodeler/pmgraphicalobjectedit.cpp168
-rw-r--r--kpovmodeler/pmgraphicalobjectedit.h78
-rw-r--r--kpovmodeler/pmgridsettings.cpp155
-rw-r--r--kpovmodeler/pmgridsettings.h60
-rw-r--r--kpovmodeler/pmheightfield.cpp469
-rw-r--r--kpovmodeler/pmheightfield.h180
-rw-r--r--kpovmodeler/pmheightfieldedit.cpp201
-rw-r--r--kpovmodeler/pmheightfieldedit.h87
-rw-r--r--kpovmodeler/pmheightfieldroam.cpp422
-rw-r--r--kpovmodeler/pmheightfieldroam.h283
-rw-r--r--kpovmodeler/pmimagemap.cpp522
-rw-r--r--kpovmodeler/pmimagemap.h209
-rw-r--r--kpovmodeler/pmimagemapedit.cpp625
-rw-r--r--kpovmodeler/pmimagemapedit.h121
-rw-r--r--kpovmodeler/pminserterrordialog.cpp51
-rw-r--r--kpovmodeler/pminserterrordialog.h54
-rw-r--r--kpovmodeler/pminsertpopup.cpp90
-rw-r--r--kpovmodeler/pminsertpopup.h81
-rw-r--r--kpovmodeler/pminsertrules.dtd97
-rw-r--r--kpovmodeler/pminsertrulesystem.cpp1061
-rw-r--r--kpovmodeler/pminsertrulesystem.h678
-rw-r--r--kpovmodeler/pminterior.cpp343
-rw-r--r--kpovmodeler/pminterior.h128
-rw-r--r--kpovmodeler/pminterioredit.cpp212
-rw-r--r--kpovmodeler/pminterioredit.h85
-rw-r--r--kpovmodeler/pminteriortexture.cpp75
-rw-r--r--kpovmodeler/pminteriortexture.h71
-rw-r--r--kpovmodeler/pminteriortextureedit.cpp44
-rw-r--r--kpovmodeler/pminteriortextureedit.h58
-rw-r--r--kpovmodeler/pmiomanager.cpp96
-rw-r--r--kpovmodeler/pmiomanager.h184
-rw-r--r--kpovmodeler/pmisosurface.cpp419
-rw-r--r--kpovmodeler/pmisosurface.h234
-rw-r--r--kpovmodeler/pmisosurfaceedit.cpp326
-rw-r--r--kpovmodeler/pmisosurfaceedit.h92
-rw-r--r--kpovmodeler/pmjuliafractal.cpp449
-rw-r--r--kpovmodeler/pmjuliafractal.h174
-rw-r--r--kpovmodeler/pmjuliafractaledit.cpp380
-rw-r--r--kpovmodeler/pmjuliafractaledit.h79
-rw-r--r--kpovmodeler/pmlathe.cpp948
-rw-r--r--kpovmodeler/pmlathe.h193
-rw-r--r--kpovmodeler/pmlatheedit.cpp333
-rw-r--r--kpovmodeler/pmlatheedit.h89
-rw-r--r--kpovmodeler/pmlayoutsettings.cpp774
-rw-r--r--kpovmodeler/pmlayoutsettings.h174
-rw-r--r--kpovmodeler/pmlibrarybrowser.cpp304
-rw-r--r--kpovmodeler/pmlibrarybrowser.h119
-rw-r--r--kpovmodeler/pmlibraryentrypreview.cpp344
-rw-r--r--kpovmodeler/pmlibraryentrypreview.h119
-rw-r--r--kpovmodeler/pmlibraryhandle.cpp395
-rw-r--r--kpovmodeler/pmlibraryhandle.h210
-rw-r--r--kpovmodeler/pmlibraryhandleedit.cpp131
-rw-r--r--kpovmodeler/pmlibraryhandleedit.h66
-rw-r--r--kpovmodeler/pmlibraryiconview.cpp328
-rw-r--r--kpovmodeler/pmlibraryiconview.h123
-rw-r--r--kpovmodeler/pmlibrarymanager.cpp121
-rw-r--r--kpovmodeler/pmlibrarymanager.h97
-rw-r--r--kpovmodeler/pmlibraryobject.cpp331
-rw-r--r--kpovmodeler/pmlibraryobject.h136
-rw-r--r--kpovmodeler/pmlibraryobjectsearch.cpp86
-rw-r--r--kpovmodeler/pmlibraryobjectsearch.h55
-rw-r--r--kpovmodeler/pmlight.cpp1064
-rw-r--r--kpovmodeler/pmlight.h372
-rw-r--r--kpovmodeler/pmlightedit.cpp450
-rw-r--r--kpovmodeler/pmlightedit.h115
-rw-r--r--kpovmodeler/pmlightgroup.cpp134
-rw-r--r--kpovmodeler/pmlightgroup.h98
-rw-r--r--kpovmodeler/pmlightgroupedit.cpp78
-rw-r--r--kpovmodeler/pmlightgroupedit.h64
-rw-r--r--kpovmodeler/pmline.cpp22
-rw-r--r--kpovmodeler/pmline.h102
-rw-r--r--kpovmodeler/pmlineedits.cpp229
-rw-r--r--kpovmodeler/pmlineedits.h133
-rw-r--r--kpovmodeler/pmlinkedit.cpp146
-rw-r--r--kpovmodeler/pmlinkedit.h105
-rw-r--r--kpovmodeler/pmlistpattern.cpp469
-rw-r--r--kpovmodeler/pmlistpattern.h351
-rw-r--r--kpovmodeler/pmlistpatternedit.cpp225
-rw-r--r--kpovmodeler/pmlistpatternedit.h78
-rw-r--r--kpovmodeler/pmlookslike.cpp92
-rw-r--r--kpovmodeler/pmlookslike.h82
-rw-r--r--kpovmodeler/pmmapmemento.cpp51
-rw-r--r--kpovmodeler/pmmapmemento.h81
-rw-r--r--kpovmodeler/pmmaterial.cpp75
-rw-r--r--kpovmodeler/pmmaterial.h75
-rw-r--r--kpovmodeler/pmmaterialedit.cpp44
-rw-r--r--kpovmodeler/pmmaterialedit.h58
-rw-r--r--kpovmodeler/pmmaterialmap.cpp338
-rw-r--r--kpovmodeler/pmmaterialmap.h153
-rw-r--r--kpovmodeler/pmmaterialmapedit.cpp299
-rw-r--r--kpovmodeler/pmmaterialmapedit.h81
-rw-r--r--kpovmodeler/pmmath.cpp67
-rw-r--r--kpovmodeler/pmmath.h48
-rw-r--r--kpovmodeler/pmmatrix.cpp442
-rw-r--r--kpovmodeler/pmmatrix.h188
-rw-r--r--kpovmodeler/pmmedia.cpp480
-rw-r--r--kpovmodeler/pmmedia.h149
-rw-r--r--kpovmodeler/pmmediaedit.cpp370
-rw-r--r--kpovmodeler/pmmediaedit.h102
-rw-r--r--kpovmodeler/pmmemento.cpp220
-rw-r--r--kpovmodeler/pmmemento.h318
-rw-r--r--kpovmodeler/pmmesh.cpp557
-rw-r--r--kpovmodeler/pmmesh.h142
-rw-r--r--kpovmodeler/pmmeshedit.cpp100
-rw-r--r--kpovmodeler/pmmeshedit.h67
-rw-r--r--kpovmodeler/pmmessage.cpp43
-rw-r--r--kpovmodeler/pmmessage.h79
-rw-r--r--kpovmodeler/pmmetaobject.cpp95
-rw-r--r--kpovmodeler/pmmetaobject.h416
-rw-r--r--kpovmodeler/pmmovecommand.cpp478
-rw-r--r--kpovmodeler/pmmovecommand.h88
-rw-r--r--kpovmodeler/pmnamedobject.cpp111
-rw-r--r--kpovmodeler/pmnamedobject.h89
-rw-r--r--kpovmodeler/pmnamedobjectedit.cpp81
-rw-r--r--kpovmodeler/pmnamedobjectedit.h64
-rw-r--r--kpovmodeler/pmnormal.cpp189
-rw-r--r--kpovmodeler/pmnormal.h122
-rw-r--r--kpovmodeler/pmnormaledit.cpp118
-rw-r--r--kpovmodeler/pmnormaledit.h70
-rw-r--r--kpovmodeler/pmobject.cpp283
-rw-r--r--kpovmodeler/pmobject.h511
-rw-r--r--kpovmodeler/pmobjectaction.h100
-rw-r--r--kpovmodeler/pmobjectdrag.cpp230
-rw-r--r--kpovmodeler/pmobjectdrag.h81
-rw-r--r--kpovmodeler/pmobjectlibrarysettings.cpp189
-rw-r--r--kpovmodeler/pmobjectlibrarysettings.h78
-rw-r--r--kpovmodeler/pmobjectlink.cpp197
-rw-r--r--kpovmodeler/pmobjectlink.h99
-rw-r--r--kpovmodeler/pmobjectlinkedit.cpp74
-rw-r--r--kpovmodeler/pmobjectlinkedit.h62
-rw-r--r--kpovmodeler/pmobjectselect.cpp361
-rw-r--r--kpovmodeler/pmobjectselect.h132
-rw-r--r--kpovmodeler/pmobjectsettings.cpp550
-rw-r--r--kpovmodeler/pmobjectsettings.h78
-rw-r--r--kpovmodeler/pmopenglsettings.cpp59
-rw-r--r--kpovmodeler/pmopenglsettings.h54
-rw-r--r--kpovmodeler/pmoutputdevice.cpp203
-rw-r--r--kpovmodeler/pmoutputdevice.h159
-rw-r--r--kpovmodeler/pmpalettevalue.cpp81
-rw-r--r--kpovmodeler/pmpalettevalue.h78
-rw-r--r--kpovmodeler/pmpalettevalueedit.cpp99
-rw-r--r--kpovmodeler/pmpalettevalueedit.h67
-rw-r--r--kpovmodeler/pmpalettevaluememento.cpp84
-rw-r--r--kpovmodeler/pmpalettevaluememento.h85
-rw-r--r--kpovmodeler/pmparser.cpp433
-rw-r--r--kpovmodeler/pmparser.h299
-rw-r--r--kpovmodeler/pmpart.cpp2884
-rw-r--r--kpovmodeler/pmpart.h1041
-rw-r--r--kpovmodeler/pmpartiface.h119
-rw-r--r--kpovmodeler/pmpattern.cpp1126
-rw-r--r--kpovmodeler/pmpattern.h449
-rw-r--r--kpovmodeler/pmpatternedit.cpp1073
-rw-r--r--kpovmodeler/pmpatternedit.h164
-rw-r--r--kpovmodeler/pmphotons.cpp240
-rw-r--r--kpovmodeler/pmphotons.h160
-rw-r--r--kpovmodeler/pmphotonsedit.cpp160
-rw-r--r--kpovmodeler/pmphotonsedit.h79
-rw-r--r--kpovmodeler/pmpigment.cpp124
-rw-r--r--kpovmodeler/pmpigment.h95
-rw-r--r--kpovmodeler/pmpigmentedit.cpp68
-rw-r--r--kpovmodeler/pmpigmentedit.h60
-rw-r--r--kpovmodeler/pmplane.cpp276
-rw-r--r--kpovmodeler/pmplane.h148
-rw-r--r--kpovmodeler/pmplaneedit.cpp124
-rw-r--r--kpovmodeler/pmplaneedit.h66
-rw-r--r--kpovmodeler/pmplanenormalcontrolpoint.cpp93
-rw-r--r--kpovmodeler/pmplanenormalcontrolpoint.h92
-rw-r--r--kpovmodeler/pmpluginmanager.cpp115
-rw-r--r--kpovmodeler/pmpluginmanager.h113
-rw-r--r--kpovmodeler/pmpluginsettings.cpp150
-rw-r--r--kpovmodeler/pmpluginsettings.h62
-rw-r--r--kpovmodeler/pmpoint.cpp98
-rw-r--r--kpovmodeler/pmpoint.h122
-rw-r--r--kpovmodeler/pmpolynom.cpp238
-rw-r--r--kpovmodeler/pmpolynom.h105
-rw-r--r--kpovmodeler/pmpolynomedit.cpp255
-rw-r--r--kpovmodeler/pmpolynomedit.h80
-rw-r--r--kpovmodeler/pmpolynomexponents.cpp71
-rw-r--r--kpovmodeler/pmpolynomexponents.h129
-rw-r--r--kpovmodeler/pmpovray31format.cpp153
-rw-r--r--kpovmodeler/pmpovray31format.h64
-rw-r--r--kpovmodeler/pmpovray31serialization.cpp2199
-rw-r--r--kpovmodeler/pmpovray31serialization.h103
-rw-r--r--kpovmodeler/pmpovray35format.cpp100
-rw-r--r--kpovmodeler/pmpovray35format.h64
-rw-r--r--kpovmodeler/pmpovray35serialization.cpp1471
-rw-r--r--kpovmodeler/pmpovray35serialization.h49
-rw-r--r--kpovmodeler/pmpovrayformat.cpp52
-rw-r--r--kpovmodeler/pmpovrayformat.h94
-rw-r--r--kpovmodeler/pmpovraymatrix.cpp152
-rw-r--r--kpovmodeler/pmpovraymatrix.h97
-rw-r--r--kpovmodeler/pmpovraymatrixedit.cpp102
-rw-r--r--kpovmodeler/pmpovraymatrixedit.h62
-rw-r--r--kpovmodeler/pmpovrayoutputwidget.cpp115
-rw-r--r--kpovmodeler/pmpovrayoutputwidget.h77
-rw-r--r--kpovmodeler/pmpovrayparser.cpp7213
-rw-r--r--kpovmodeler/pmpovrayparser.h534
-rw-r--r--kpovmodeler/pmpovrayrenderwidget.cpp437
-rw-r--r--kpovmodeler/pmpovrayrenderwidget.h177
-rw-r--r--kpovmodeler/pmpovraysettings.cpp308
-rw-r--r--kpovmodeler/pmpovraysettings.h98
-rw-r--r--kpovmodeler/pmpovraywidget.cpp411
-rw-r--r--kpovmodeler/pmpovraywidget.h103
-rw-r--r--kpovmodeler/pmpreviewsettings.cpp207
-rw-r--r--kpovmodeler/pmpreviewsettings.h69
-rw-r--r--kpovmodeler/pmprism.cpp1187
-rw-r--r--kpovmodeler/pmprism.h224
-rw-r--r--kpovmodeler/pmprismedit.cpp696
-rw-r--r--kpovmodeler/pmprismedit.h122
-rw-r--r--kpovmodeler/pmprismmemento.cpp55
-rw-r--r--kpovmodeler/pmprismmemento.h71
-rw-r--r--kpovmodeler/pmprojectedthrough.cpp92
-rw-r--r--kpovmodeler/pmprojectedthrough.h82
-rw-r--r--kpovmodeler/pmprototypemanager.cpp243
-rw-r--r--kpovmodeler/pmprototypemanager.h149
-rw-r--r--kpovmodeler/pmquickcolor.cpp132
-rw-r--r--kpovmodeler/pmquickcolor.h100
-rw-r--r--kpovmodeler/pmquickcoloredit.cpp77
-rw-r--r--kpovmodeler/pmquickcoloredit.h65
-rw-r--r--kpovmodeler/pmradiosity.cpp428
-rw-r--r--kpovmodeler/pmradiosity.h241
-rw-r--r--kpovmodeler/pmradiosityedit.cpp233
-rw-r--r--kpovmodeler/pmradiosityedit.h81
-rw-r--r--kpovmodeler/pmrainbow.cpp422
-rw-r--r--kpovmodeler/pmrainbow.h139
-rw-r--r--kpovmodeler/pmrainbowedit.cpp278
-rw-r--r--kpovmodeler/pmrainbowedit.h90
-rw-r--r--kpovmodeler/pmraw.cpp135
-rw-r--r--kpovmodeler/pmraw.h90
-rw-r--r--kpovmodeler/pmrawedit.cpp79
-rw-r--r--kpovmodeler/pmrawedit.h62
-rw-r--r--kpovmodeler/pmrecursiveobjectiterator.cpp62
-rw-r--r--kpovmodeler/pmrecursiveobjectiterator.h49
-rw-r--r--kpovmodeler/pmrendermanager.cpp1647
-rw-r--r--kpovmodeler/pmrendermanager.h435
-rw-r--r--kpovmodeler/pmrendermode.cpp220
-rw-r--r--kpovmodeler/pmrendermode.h128
-rw-r--r--kpovmodeler/pmrendermodesdialog.cpp611
-rw-r--r--kpovmodeler/pmrendermodesdialog.h179
-rw-r--r--kpovmodeler/pmresourcelocator.cpp103
-rw-r--r--kpovmodeler/pmresourcelocator.h65
-rw-r--r--kpovmodeler/pmrotate.cpp164
-rw-r--r--kpovmodeler/pmrotate.h102
-rw-r--r--kpovmodeler/pmrotatecontrolpoint.cpp78
-rw-r--r--kpovmodeler/pmrotatecontrolpoint.h73
-rw-r--r--kpovmodeler/pmrotateedit.cpp74
-rw-r--r--kpovmodeler/pmrotateedit.h62
-rw-r--r--kpovmodeler/pmscale.cpp163
-rw-r--r--kpovmodeler/pmscale.h103
-rw-r--r--kpovmodeler/pmscalecontrolpoint.cpp58
-rw-r--r--kpovmodeler/pmscalecontrolpoint.h71
-rw-r--r--kpovmodeler/pmscaleedit.cpp74
-rw-r--r--kpovmodeler/pmscaleedit.h62
-rw-r--r--kpovmodeler/pmscanner.cpp1353
-rw-r--r--kpovmodeler/pmscanner.h191
-rw-r--r--kpovmodeler/pmscene.cpp119
-rw-r--r--kpovmodeler/pmscene.h92
-rw-r--r--kpovmodeler/pmserializer.cpp93
-rw-r--r--kpovmodeler/pmserializer.h179
-rw-r--r--kpovmodeler/pmsettingsdialog.cpp263
-rw-r--r--kpovmodeler/pmsettingsdialog.h187
-rw-r--r--kpovmodeler/pmshell.cpp676
-rw-r--r--kpovmodeler/pmshell.h172
-rw-r--r--kpovmodeler/pmskysphere.cpp76
-rw-r--r--kpovmodeler/pmskysphere.h75
-rw-r--r--kpovmodeler/pmskysphereedit.cpp44
-rw-r--r--kpovmodeler/pmskysphereedit.h58
-rw-r--r--kpovmodeler/pmslope.cpp146
-rw-r--r--kpovmodeler/pmslope.h94
-rw-r--r--kpovmodeler/pmslopeedit.cpp95
-rw-r--r--kpovmodeler/pmslopeedit.h68
-rw-r--r--kpovmodeler/pmsolidcolor.cpp127
-rw-r--r--kpovmodeler/pmsolidcolor.h97
-rw-r--r--kpovmodeler/pmsolidcoloredit.cpp79
-rw-r--r--kpovmodeler/pmsolidcoloredit.h62
-rw-r--r--kpovmodeler/pmsolidobject.cpp140
-rw-r--r--kpovmodeler/pmsolidobject.h94
-rw-r--r--kpovmodeler/pmsolidobjectedit.cpp82
-rw-r--r--kpovmodeler/pmsolidobjectedit.h63
-rw-r--r--kpovmodeler/pmsor.cpp708
-rw-r--r--kpovmodeler/pmsor.h191
-rw-r--r--kpovmodeler/pmsorcontrolpoint.cpp228
-rw-r--r--kpovmodeler/pmsorcontrolpoint.h99
-rw-r--r--kpovmodeler/pmsoredit.cpp282
-rw-r--r--kpovmodeler/pmsoredit.h86
-rw-r--r--kpovmodeler/pmsorsegment.cpp97
-rw-r--r--kpovmodeler/pmsorsegment.h77
-rw-r--r--kpovmodeler/pmsphere.cpp411
-rw-r--r--kpovmodeler/pmsphere.h165
-rw-r--r--kpovmodeler/pmsphereedit.cpp95
-rw-r--r--kpovmodeler/pmsphereedit.h64
-rw-r--r--kpovmodeler/pmspheresweep.cpp894
-rw-r--r--kpovmodeler/pmspheresweep.h245
-rw-r--r--kpovmodeler/pmspheresweepedit.cpp354
-rw-r--r--kpovmodeler/pmspheresweepedit.h90
-rw-r--r--kpovmodeler/pmsplinememento.cpp58
-rw-r--r--kpovmodeler/pmsplinememento.h68
-rw-r--r--kpovmodeler/pmsplinesegment.cpp107
-rw-r--r--kpovmodeler/pmsplinesegment.h122
-rw-r--r--kpovmodeler/pmsqe.cpp413
-rw-r--r--kpovmodeler/pmsqe.h155
-rw-r--r--kpovmodeler/pmsqeedit.cpp93
-rw-r--r--kpovmodeler/pmsqeedit.h63
-rw-r--r--kpovmodeler/pmsymboltable.cpp121
-rw-r--r--kpovmodeler/pmsymboltable.h128
-rw-r--r--kpovmodeler/pmtext.cpp339
-rw-r--r--kpovmodeler/pmtext.h147
-rw-r--r--kpovmodeler/pmtextedit.cpp138
-rw-r--r--kpovmodeler/pmtextedit.h74
-rw-r--r--kpovmodeler/pmtexture.cpp124
-rw-r--r--kpovmodeler/pmtexture.h95
-rw-r--r--kpovmodeler/pmtexturebase.cpp180
-rw-r--r--kpovmodeler/pmtexturebase.h96
-rw-r--r--kpovmodeler/pmtexturebaseedit.cpp72
-rw-r--r--kpovmodeler/pmtexturebaseedit.h64
-rw-r--r--kpovmodeler/pmtextureedit.cpp67
-rw-r--r--kpovmodeler/pmtextureedit.h60
-rw-r--r--kpovmodeler/pmtexturemap.cpp601
-rw-r--r--kpovmodeler/pmtexturemap.h368
-rw-r--r--kpovmodeler/pmtexturemapedit.cpp152
-rw-r--r--kpovmodeler/pmtexturemapedit.h70
-rw-r--r--kpovmodeler/pmthreestate.h26
-rw-r--r--kpovmodeler/pmtokens.h463
-rw-r--r--kpovmodeler/pmtorus.cpp379
-rw-r--r--kpovmodeler/pmtorus.h172
-rw-r--r--kpovmodeler/pmtorusedit.cpp105
-rw-r--r--kpovmodeler/pmtorusedit.h65
-rw-r--r--kpovmodeler/pmtranslate.cpp162
-rw-r--r--kpovmodeler/pmtranslate.h102
-rw-r--r--kpovmodeler/pmtranslatecontrolpoint.cpp50
-rw-r--r--kpovmodeler/pmtranslatecontrolpoint.h71
-rw-r--r--kpovmodeler/pmtranslateedit.cpp74
-rw-r--r--kpovmodeler/pmtranslateedit.h62
-rw-r--r--kpovmodeler/pmtreeview.cpp820
-rw-r--r--kpovmodeler/pmtreeview.h182
-rw-r--r--kpovmodeler/pmtreeviewitem.cpp117
-rw-r--r--kpovmodeler/pmtreeviewitem.h88
-rw-r--r--kpovmodeler/pmtriangle.cpp621
-rw-r--r--kpovmodeler/pmtriangle.h158
-rw-r--r--kpovmodeler/pmtriangleedit.cpp273
-rw-r--r--kpovmodeler/pmtriangleedit.h77
-rw-r--r--kpovmodeler/pmtruetypecache.cpp395
-rw-r--r--kpovmodeler/pmtruetypecache.h194
-rw-r--r--kpovmodeler/pmunknownview.cpp37
-rw-r--r--kpovmodeler/pmunknownview.h47
-rw-r--r--kpovmodeler/pmvalue.h102
-rw-r--r--kpovmodeler/pmvariant.cpp920
-rw-r--r--kpovmodeler/pmvariant.h221
-rw-r--r--kpovmodeler/pmvector.cpp593
-rw-r--r--kpovmodeler/pmvector.h275
-rw-r--r--kpovmodeler/pmvectorcontrolpoint.cpp89
-rw-r--r--kpovmodeler/pmvectorcontrolpoint.h101
-rw-r--r--kpovmodeler/pmvectoredit.cpp235
-rw-r--r--kpovmodeler/pmvectoredit.h100
-rw-r--r--kpovmodeler/pmvectorlistedit.cpp357
-rw-r--r--kpovmodeler/pmvectorlistedit.h174
-rw-r--r--kpovmodeler/pmview.cpp108
-rw-r--r--kpovmodeler/pmview.h76
-rw-r--r--kpovmodeler/pmviewbase.cpp20
-rw-r--r--kpovmodeler/pmviewbase.h128
-rw-r--r--kpovmodeler/pmviewfactory.cpp94
-rw-r--r--kpovmodeler/pmviewfactory.h145
-rw-r--r--kpovmodeler/pmviewlayoutmanager.cpp935
-rw-r--r--kpovmodeler/pmviewlayoutmanager.h306
-rw-r--r--kpovmodeler/pmviewstructure.cpp127
-rw-r--r--kpovmodeler/pmviewstructure.h222
-rw-r--r--kpovmodeler/pmwarp.cpp548
-rw-r--r--kpovmodeler/pmwarp.h162
-rw-r--r--kpovmodeler/pmwarpedit.cpp407
-rw-r--r--kpovmodeler/pmwarpedit.h110
-rw-r--r--kpovmodeler/pmxmlhelper.cpp160
-rw-r--r--kpovmodeler/pmxmlhelper.h121
-rw-r--r--kpovmodeler/pmxmlparser.cpp177
-rw-r--r--kpovmodeler/pmxmlparser.h84
-rw-r--r--kpovmodeler/povraydocmap.xml174
-rw-r--r--kpovmodeler/questionmark.pngbin0 -> 12749 bytes
-rw-r--r--kpovmodeler/version.h18
919 files changed, 124914 insertions, 0 deletions
diff --git a/kpovmodeler/AUTHORS b/kpovmodeler/AUTHORS
new file mode 100644
index 00000000..5afc7760
--- /dev/null
+++ b/kpovmodeler/AUTHORS
@@ -0,0 +1,13 @@
+Maintainer, framework, everything:
+Andreas Zehender <zehender@kde.org>
+
+Textures:
+Luis Passos Carvalho <lpassos@oninetspeed.pt>
+
+Povray 3.5 Objects:
+Leon Pennington <leon@leonscape.co.uk>
+
+Some graphical objects:
+Philippe Van Hecke <lephiloux@tiscalinet.be>
+Leonardo Skorianez <lsk@if.ufrj.br>
+
diff --git a/kpovmodeler/BUGS b/kpovmodeler/BUGS
new file mode 100644
index 00000000..7cecd8b3
--- /dev/null
+++ b/kpovmodeler/BUGS
@@ -0,0 +1,5 @@
+Known bugs in kpovmodeler in version 0.2
+--------
+
+None at the moment
+
diff --git a/kpovmodeler/COPYING b/kpovmodeler/COPYING
new file mode 100644
index 00000000..54754ab4
--- /dev/null
+++ b/kpovmodeler/COPYING
@@ -0,0 +1,341 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/kpovmodeler/ChangeLog b/kpovmodeler/ChangeLog
new file mode 100644
index 00000000..9ad06f1f
--- /dev/null
+++ b/kpovmodeler/ChangeLog
@@ -0,0 +1,83 @@
+Version 0.0.1:
+ - Development release
+ - Framework is finished
+ - Some basic objects and textures
+
+Version 0.1
+ - First release for the public
+ - Most textures are supported
+ - All simple objects are supported
+ - Rendering the scene with povray inside the program
+ - Textures can be previewed inside the dialog view
+ - The camera supports now focal blur and all complex projections
+ - The camera view can render all projections except the omnimax projection
+
+Version 0.1.1
+ - Bugfix release
+ - Fixed bugs:
+ - A bug that causes the program to crash during rendering
+ - A bug that causes the program to hang during auto scroll
+ - "Revert file" now works
+
+Version 0.2
+ - Ported to Qt 3.0 / KDE 3.0, moved to the kdegraphics package
+ - Dock widgets
+ - Qt OpenGL extension removed
+ - Key navigation in the tree view
+ - Compressed document format
+ - Fixed bugs:
+ - Validation check for the depth edit in the pattern edit
+ - Texture preview didn't serialize all needed declares
+ - "File close" follows the style guide
+
+Version 1.0
+ - View layouts
+ - User documentation
+
+Version 1.1
+ - Plugin framework (work in progress)
+ - Object and texture library (work in progress)
+ - new --no-dri command line option and configuration dialog to
+ disable direct rendering
+ - First characters of comments are used as description in the tree view
+ - The user is asked if pending changes should be saved before rendering
+ - Nicer render speed values
+ - Empty line before comments in povray output
+ - Control point selection in the properties view for bicubic patch,
+ sor, lathe and prism
+ - Export flag for graphical objects and the camera
+ - Removed the glut dependency
+ - Added Heightfield Viewstructure
+ - Light object gained, parallel, circular and orient options
+ - Dispersion options added to interior
+ - Added Noise generator options to global settings and patterns
+ - New warp types added
+ - Added accuracy setting to normals
+ - Added new finish options
+ - New objects:
+ - Isosurface
+ - Sphere sweep
+ - Projected through
+ - Radiosity
+ - Global photons
+ - Photons
+ - Light groups
+ - Interior textures
+ - Mesh
+
+Version 1.1.1
+ - Added graphical editing to Mesh object
+ - Updated Media too handle new methods and options
+ - Added new patterns cells, additional crackle options, julia,
+ additional mandel options, and slope
+ - Added keywords no_image, no_reflection, and double_illuminate to
+ graphical objects
+ - Added uv mapping and uv vectors
+
+Version 1.1.2
+ - Added local and global detail levels too:
+ Sphere, Cylinder, Cone, Torus, Disc, Blob Sphere, Blob Cylinder, Lathe,
+ SOR, Prism, SQE, Sphere sweep and Heightfield.
+
+Version 1.2
+ - The user is asked if pending changes should be saved before saving or exporting
diff --git a/kpovmodeler/INSTALL b/kpovmodeler/INSTALL
new file mode 100644
index 00000000..02a4a074
--- /dev/null
+++ b/kpovmodeler/INSTALL
@@ -0,0 +1,167 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes a while. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 4. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
diff --git a/kpovmodeler/Makefile.am b/kpovmodeler/Makefile.am
new file mode 100644
index 00000000..4e1f3ef9
--- /dev/null
+++ b/kpovmodeler/Makefile.am
@@ -0,0 +1,251 @@
+
+INCLUDES = $(LIBFREETYPE_CFLAGS) $(all_includes)
+
+SUBDIRS = pics examples
+
+KDE_OPTIONS = nofinal
+
+####
+# common lib
+
+lib_LTLIBRARIES = libkpovmodeler.la
+libkpovmodeler_la_SOURCES = pmpart.cpp pmfactory.cpp \
+ pmview.cpp pmshell.cpp pmobjectdrag.cpp \
+ pmtreeview.cpp pmmessage.cpp pmtreeviewitem.cpp \
+ pmerrordialog.cpp pminsertpopup.cpp pminserterrordialog.cpp \
+ pmglview.cpp pmrendermanager.cpp pmobjectselect.cpp \
+ pmrendermodesdialog.cpp pmpovrayrenderwidget.cpp pmpovraywidget.cpp \
+ pmpovrayoutputwidget.cpp pmsettingsdialog.cpp \
+ pmcolorsettings.cpp pmgridsettings.cpp pmlayoutsettings.cpp \
+ pmobjectlibrarysettings.cpp pmobjectsettings.cpp pmpluginsettings.cpp \
+ pmpovraysettings.cpp pmpreviewsettings.cpp pmopenglsettings.cpp \
+ pmdockwidget.cpp pmdockwidget_private.cpp pmviewlayoutmanager.cpp \
+ pmviewbase.cpp pmviewfactory.cpp pmunknownview.cpp pmdragwidget.cpp \
+ \
+ pmprototypemanager.cpp \
+ pmobject.cpp pmcompositeobject.cpp \
+ pmgraphicalobject.cpp pmsolidobject.cpp \
+ pmscene.cpp pmglobalsettings.cpp pmskysphere.cpp pmrainbow.cpp \
+ pmfog.cpp pmbox.cpp pmsphere.cpp pmblob.cpp pmblobsphere.cpp \
+ pmblobcylinder.cpp pmtext.cpp pmjuliafractal.cpp \
+ pmcylinder.cpp pmcone.cpp pmtorus.cpp pmplane.cpp pmpolynom.cpp \
+ pmdisc.cpp pmbicubicpatch.cpp pmtriangle.cpp \
+ pmlathe.cpp pmprism.cpp pmsor.cpp pmsqe.cpp pmheightfield.cpp \
+ pmheightfieldroam.cpp pmcomment.cpp pmraw.cpp pmnamedobject.cpp \
+ pmtranslate.cpp pmscale.cpp pmrotate.cpp pmpovraymatrix.cpp \
+ pmcsg.cpp pmcamera.cpp pmboundedby.cpp pmclippedby.cpp \
+ pmlight.cpp pmlookslike.cpp pmprojectedthrough.cpp\
+ pmtexturebase.cpp pmtexture.cpp pmpigment.cpp \
+ pmsolidcolor.cpp pmlistpattern.cpp pmquickcolor.cpp \
+ pmpattern.cpp pmblendmapmodifiers.cpp pmtexturemap.cpp \
+ pmnormal.cpp pmslope.cpp pmwarp.cpp pmfinish.cpp \
+ pminterior.cpp pmmedia.cpp pmmaterial.cpp pmmaterialmap.cpp \
+ pmdensity.cpp pmimagemap.cpp pmbumpmap.cpp \
+ \
+ pmisosurface.cpp pmradiosity.cpp pmglobalphotons.cpp \
+ pmphotons.cpp pmlightgroup.cpp pminteriortexture.cpp \
+ pmspheresweep.cpp pmmesh.cpp pmdetailobject.cpp \
+ \
+ pmdeclare.cpp pmobjectlink.cpp \
+ pmrecursiveobjectiterator.cpp \
+ \
+ pmaddcommand.cpp pmcommandmanager.cpp pmdatachangecommand.cpp \
+ pmdeletecommand.cpp pmmovecommand.cpp \
+ \
+ pmdialogview.cpp pmdialogeditbase.cpp pmgraphicalobjectedit.cpp \
+ pmnamedobjectedit.cpp pmsolidobjectedit.cpp pmskysphereedit.cpp \
+ pmglobalsettingsedit.cpp pmrainbowedit.cpp pmfogedit.cpp \
+ pmboxedit.cpp pmsphereedit.cpp pmblobedit.cpp pmblobsphereedit.cpp \
+ pmblobcylinderedit.cpp pmtextedit.cpp pmjuliafractaledit.cpp \
+ pmcylinderedit.cpp pmconeedit.cpp pmtorusedit.cpp pmplaneedit.cpp \
+ pmpolynomedit.cpp pmheightfieldedit.cpp \
+ pmlatheedit.cpp pmprismedit.cpp pmsoredit.cpp pmsqeedit.cpp \
+ pmdiscedit.cpp pmbicubicpatchedit.cpp pmtriangleedit.cpp \
+ pmcommentedit.cpp pmrawedit.cpp \
+ pmrotateedit.cpp pmscaleedit.cpp pmtranslateedit.cpp \
+ pmpovraymatrixedit.cpp \
+ pmcsgedit.cpp pmcameraedit.cpp pmlightedit.cpp pmboundedbyedit.cpp \
+ pmclippedbyedit.cpp \
+ pmlineedits.cpp pmvectorlistedit.cpp pmcoloredit.cpp pmlinkedit.cpp \
+ pmvectoredit.cpp pmpalettevalueedit.cpp pmformulalabel.cpp \
+ pmtexturebaseedit.cpp pmtextureedit.cpp pmpigmentedit.cpp \
+ pmsolidcoloredit.cpp pmlistpatternedit.cpp pmquickcoloredit.cpp \
+ pmpatternedit.cpp pmblendmapmodifiersedit.cpp pmimagemapedit.cpp \
+ pmtexturemapedit.cpp pmbumpmapedit.cpp pmmaterialmapedit.cpp \
+ pmnormaledit.cpp pmslopeedit.cpp pmfinishedit.cpp pmwarpedit.cpp \
+ pminterioredit.cpp pmmediaedit.cpp pmmaterialedit.cpp \
+ pmdensityedit.cpp pmdeclareedit.cpp pmobjectlinkedit.cpp \
+ \
+ pmisosurfaceedit.cpp pmradiosityedit.cpp pmglobalphotonsedit.cpp \
+ pmphotonsedit.cpp pmlightgroupedit.cpp pminteriortextureedit.cpp \
+ pmspheresweepedit.cpp pmmeshedit.cpp pmdetailobjectedit.cpp \
+ \
+ pmcontrolpoint.cpp pm3dcontrolpoint.cpp pm2dcontrolpoint.cpp \
+ pmsorcontrolpoint.cpp pmtranslatecontrolpoint.cpp \
+ pmrotatecontrolpoint.cpp pmscalecontrolpoint.cpp \
+ pmvectorcontrolpoint.cpp pmdistancecontrolpoint.cpp \
+ pmplanenormalcontrolpoint.cpp \
+ \
+ pmmemento.cpp pmmapmemento.cpp pmsplinememento.cpp pmprismmemento.cpp \
+ pmpalettevaluememento.cpp \
+ \
+ pmiomanager.cpp pmpovrayformat.cpp pmpovray31format.cpp pmpovray35format.cpp \
+ pmpovray31serialization.cpp pmpovray35serialization.cpp \
+ pmscanner.cpp pmparser.cpp pmxmlparser.cpp pmpovrayparser.cpp \
+ pmserializer.cpp pmoutputdevice.cpp pmxmlhelper.cpp \
+ pmfiledialog.cpp \
+ \
+ pmpalettevalue.cpp \
+ pmvector.cpp pmmath.cpp pmmatrix.cpp pmviewstructure.cpp pmline.cpp \
+ pmcolor.cpp pmpoint.cpp pmsymboltable.cpp pmactions.cpp \
+ pmsplinesegment.cpp pmsorsegment.cpp pmpolynomexponents.cpp \
+ pmvariant.cpp pmmetaobject.cpp pmenumproperty.cpp pmface.cpp \
+ \
+ pmrendermode.cpp pmresourcelocator.cpp pmtruetypecache.cpp \
+ pmdocumentationmap.cpp pminsertrulesystem.cpp pmlibrarymanager.cpp \
+ pmlibraryhandle.cpp pmlibraryhandleedit.cpp pmlibraryobject.cpp \
+ pmlibraryentrypreview.cpp\
+ pmlibrarybrowser.cpp pmlibraryiconview.cpp pmlibraryobjectsearch.cpp \
+ pmpluginmanager.cpp \
+ pmpartiface.skel
+
+libkpovmodeler_la_LDFLAGS = $(all_libraries) -version-info 0:0:0 -no-undefined $(LIBFREETYPE_RPATH)
+libkpovmodeler_la_LIBADD = $(LIBFREETYPE_LIBS) $(LIB_KPARTS) $(GLLIB) -lXmu -lXi
+METASOURCES = AUTO
+
+noinst_HEADERS = pmpart.h pmfactory.h pmview.h pmshell.h pmobjectdrag.h \
+ pmtreeview.h pmtreeviewitem.h pmmessage.h \
+ pmerrordialog.h pminsertpopup.h pminserterrordialog.h \
+ pmglview.h pmrendermanager.h pmobjectselect.h \
+ pmrendermodesdialog.h pmpovrayrenderwidget.h pmpovraywidget.h \
+ pmpovrayoutputwidget.h pmsettingsdialog.h \
+ pmcolorsettings.h pmgridsettings.h pmlayoutsettings.h \
+ pmobjectlibrarysettings.h pmobjectsettings.h pmpluginsettings.h \
+ pmpovraysettings.h pmpreviewsettings.h pmopenglsettings.h \
+ pmdockwidget.h pmdockwidget_private.h pmviewlayoutmanager.h \
+ pmviewbase.h pmviewfactory.h pmunknownview.h pmdragwidget.h \
+ \
+ pmprototypemanager.h pmallobjects.h \
+ pmobject.h pmcompositeobject.h \
+ pmgraphicalobject.h pmsolidobject.h \
+ pmscene.h pmglobalsettings.h pmskysphere.h pmrainbow.h \
+ pmfog.h pmbox.h pmsphere.h pmblob.h pmblobsphere.h \
+ pmblobcylinder.h pmtext.h pmjuliafractal.h \
+ pmcylinder.h pmcone.h pmtorus.h pmplane.h pmpolynom.h \
+ pmdisc.h pmbicubicpatch.h pmtriangle.h \
+ pmlathe.h pmprism.h pmsor.h pmsqe.h pmheightfield.h \
+ pmheightfieldroam.h pmcomment.h pmraw.h pmnamedobject.h \
+ pmtranslate.h pmscale.h pmrotate.h pmpovraymatrix.h \
+ pmcsg.h pmcamera.h pmboundedby.h pmclippedby.h \
+ pmlight.h pmlookslike.h pmprojectedthrough.h\
+ pmtexturebase.h pmtexture.h pmpigment.h \
+ pmsolidcolor.h pmlistpattern.h pmquickcolor.h pmmaterialmap.h \
+ pmpattern.h pmblendmapmodifiers.h pmtexturemap.h pmnormal.h \
+ pmslope.h pmfinish.h pmwarp.h pminterior.h pmmedia.h pmmaterial.h \
+ pmdensity.h pmimagemap.h pmbumpmap.h pmdeclare.h pmobjectlink.h \
+ pmrecursiveobjectiterator.h \
+ \
+ pmisosurface.h pmradiosity.h pmglobalphotons.h \
+ pmphotons.h pmlightgroup.h pminteriortexture.h \
+ pmspheresweep.h pmmesh.h pmdetailobject.h \
+ \
+ pmcommand.h pmaddcommand.h pmcommandmanager.h pmdatachangecommand.h \
+ pmallcommands.h pmdeletecommand.h pmmovecommand.h \
+ \
+ pmdialogview.h pmdialogeditbase.h pmgraphicalobjectedit.h \
+ pmnamedobjectedit.h pmsolidobjectedit.h pmskysphereedit.h \
+ pmglobalsettingsedit.h pmrainbowedit.h pmfogedit.h \
+ pmboxedit.h pmsphereedit.h pmblobedit.h pmblobsphereedit.h \
+ pmblobcylinderedit.h pmtextedit.h pmjuliafractaledit.h \
+ pmcylinderedit.h pmconeedit.h pmtorusedit.h pmplaneedit.h \
+ pmpolynomedit.h pmheightfieldedit.h \
+ pmdiscedit.h pmbicubicpatchedit.h pmtriangleedit.h \
+ pmlatheedit.h pmprismedit.h pmsoredit.h pmsqeedit.h \
+ pmcommentedit.h pmrawedit.h \
+ pmrotateedit.h pmscaleedit.h pmtranslateedit.h \
+ pmpovraymatrixedit.h \
+ pmcsgedit.h pmcameraedit.h pmlightedit.h pmboundedbyedit.h \
+ pmclippedbyedit.h \
+ pmlineedits.h pmvectorlistedit.h pmcoloredit.h pmlinkedit.h \
+ pmvectoredit.h pmpalettevalueedit.h pmformulalabel.h \
+ pmtexturebaseedit.h pmtextureedit.h pmpigmentedit.h \
+ pmsolidcoloredit.h pmlistpatternedit.h pmquickcoloredit.h \
+ pmpatternedit.h pmblendmapmodifiersedit.h pmimagemapedit.h \
+ pmtexturemapedit.h pmbumpmapedit.h pmmaterialmapedit.h \
+ pmnormaledit.h pmslopeedit.h pmfinishedit.h pmwarpedit.h \
+ pminterioredit.h pmmediaedit.h pmmaterialedit.h pmdensityedit.h \
+ pmdeclareedit.h pmobjectlinkedit.h \
+ \
+ pmisosurfaceedit.h pmradiosityedit.h pmglobalphotonsedit.h \
+ pmphotonsedit.h pmlightgroupedit.h pminteriortextureedit.h \
+ pmspheresweepedit.h pmmeshedit.h pmdetailobjectedit.h \
+ \
+ pmcontrolpoint.h pm3dcontrolpoint.h pm2dcontrolpoint.h \
+ pmsorcontrolpoint.h pmtranslatecontrolpoint.h \
+ pmrotatecontrolpoint.h pmscalecontrolpoint.h \
+ pmvectorcontrolpoint.h pmdistancecontrolpoint.h \
+ pmplanenormalcontrolpoint.h \
+ \
+ pmmemento.h pmmapmemento.h pmsplinememento.h pmprismmemento.h \
+ pmpalettevaluememento.h \
+ \
+ pmiomanager.h pmpovrayformat.h pmpovray31format.h pmpovray35format.h \
+ pmpovray31serialization.h pmpovray35serialization.h \
+ pmtokens.h pmscanner.h \
+ pmparser.h pmxmlparser.h pmpovrayparser.h \
+ pmserializer.h pmoutputdevice.h pmxmlhelper.h \
+ pmfiledialog.h \
+ \
+ pmerrorflags.h pmpalettevalue.h \
+ pmvector.h pmmath.h pmmatrix.h pmviewstructure.h pmline.h \
+ pmcolor.h pmpoint.h pmvalue.h pmsymboltable.h pmactions.h \
+ pmobjectaction.h pmsplinesegment.h pmsorsegment.h pmpolynomexponents.h \
+ pmface.h \
+ \
+ pmrendermode.h pmglobals.h pmdefaults.h pmresourcelocator.h \
+ pmtruetypecache.h pmdocumentationmap.h pminsertrulesystem.h \
+ pmlibrarymanager.h pmlibraryhandle.h pmlibraryhandleedit.h \
+ pmlibraryobject.h pmlibrarybrowser.h pmlibraryiconview.h \
+ pmlibraryentrypreview.h\
+ pmlibraryobjectsearch.h \
+ pmpluginmanager.h \
+ \
+ version.h pmdocumentformat.h pmdebug.h pmpartiface.h
+
+####
+# the part
+
+kde_module_LTLIBRARIES = libkpovmodelerpart.la
+
+libkpovmodelerpart_la_SOURCES = dummy.cpp
+libkpovmodelerpart_la_LIBADD = libkpovmodeler.la
+libkpovmodelerpart_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
+
+####
+# the executable
+
+bin_PROGRAMS = kpovmodeler
+
+kpovmodeler_SOURCES = main.cpp
+kpovmodeler_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+kpovmodeler_LDADD = libkpovmodeler.la
+
+dummy.cpp:
+ echo > dummy.cpp
+
+rcdir = $(kde_datadir)/kpovmodeler
+rc_DATA = kpovmodelershell.rc kpovmodelerui.rc kpovmodelerbrowser.rc \
+ povraydocmap.xml baseinsertrules.xml questionmark.png
+
+
+EXTRA_DIST = kpovmodeler.desktop
+
+
+# make messages.po. Move this one to ../po/ and "make merge" in po
+# the -x is for skipping messages already translated in kdelibs
+messages: rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/kpovmodeler.pot
+
+KDE_ICON = kpovmodeler_doc kpovmodeler
+
+xdg_apps_DATA = kpovmodeler.desktop
diff --git a/kpovmodeler/README b/kpovmodeler/README
new file mode 100644
index 00000000..209fde03
--- /dev/null
+++ b/kpovmodeler/README
@@ -0,0 +1,3 @@
+KPovModeler: A graphical editor for povray scenes
+
+See http://www.kpovmodeler.org
diff --git a/kpovmodeler/REQUIREMENTS b/kpovmodeler/REQUIREMENTS
new file mode 100644
index 00000000..17987faa
--- /dev/null
+++ b/kpovmodeler/REQUIREMENTS
@@ -0,0 +1,19 @@
+Requirements for KPovModeler 1.0
+--------------------------------
+
+The program requires:
+
+- KDE-3.0 with header files
+
+- Qt-3.0.2 with header files
+
+- Freetype2 (Text view structures will be disabled otherwise)
+
+- OpenGL, glut, glu, glx libraries and header files
+
+- The Qt OpenGL extension is _NOT_ required any more!
+
+If you still have problems compiling the application,
+visit http://www.kpovmodeler.org/install.html
+or contact the KPovModeler developers
+http://www.kpovmodeler.org/contact.html
diff --git a/kpovmodeler/StyleConvention b/kpovmodeler/StyleConvention
new file mode 100644
index 00000000..eddc404f
--- /dev/null
+++ b/kpovmodeler/StyleConvention
@@ -0,0 +1,225 @@
+ Coding Style Convention
+ -------------------------
+
+This document describes the coding style convention
+used in KPovModeler.
+
+Author: Andreas Zehender <zehender@kde.org>
+Date: 16 June 2001
+
+If you edit existing files or create new ones, please follow this convention.
+This ensures that the code is consistent and clear.
+
+1) Indentation
+--------------
+
+- Use 3 spaces as basic offset. Do not use tabs for indentation.
+- Do not indent access keywords (public, protected, private) as
+ well as signal/slot keywords.
+- Do not indent braces.
+- Put braces in separate lines.
+- Indent case statements.
+
+Example:
+class abcd
+{
+public:
+ void someMethod( );
+};
+
+void abcd::someMethod( )
+{
+ if( 1 == 2 )
+ {
+ }
+ else
+ {
+ switch( x )
+ {
+ case 1:
+ y = 2;
+ break;
+ default:
+ y = -2;
+ }
+ }
+}
+
+
+2) Spacing
+----------
+
+Use many spaces.
+Use it
+- before and after brackets
+- before and after operators
+- after commas
+
+Examples:
+
+a = someMethod( ); // Notice the space between the brackets!
+b = anotherMethod( ( a + b ) / 2, 3 ) || 23456;
+if( ( a == 2 ) && !b )
+
+
+3) Type Modifiers (Pointers and References)
+-------------------------------------------
+
+Put type modifiers behind the type, not before the variable name.
+
+Example:
+
+const QString& type;
+PMObject* obj;
+
+
+4) Names
+--------
+
+Variables:
+----------
+Member variables begin with "m_".
+Static variables begin with "s_".
+Member pointers begin with "m_p".
+
+All variables begin with a lower case (member variables after the "m_").
+Use upper case character to separate different words.
+
+Examples:
+
+class abcd
+{
+ int m_firstMember;
+ char* m_pFirstMember;
+ static const char* s_pAStaticPointerToConstCharThatMeansItIsAString;
+};
+
+void abcd::efgh( )
+{
+ int aLocalVariable;
+}
+
+Classes:
+--------
+All classes start with "PM" and a upper case character.
+
+Methods:
+--------
+All methods start with a lower case character.
+
+Set methods begin with "set".
+Get methods do NOT begin with "get".
+
+Examples:
+
+int PMSPhere::centre( ) const;
+void PMSphere::setCentre( );
+
+5) KDoc Comments
+----------------
+
+Use KDoc comments to document classes.
+
+Don't add a description if you just overload a virtual function
+that doesn't add some functionality.
+
+Example:
+
+/** Returns the internal object name (not i18n'ed) */
+virtual PMObject::className( ) const;
+
+/** */
+virtual PMSphere::className( ) const;
+
+KDoc will then generate the following output:
+
+<documentation>
+PMObject* newObject ( )
+
+[const virtual]
+
+Reimplemented from PMObject.
+</documentation>
+
+
+6) Long Lines
+--------------
+Try to use only 80 characters per line.
+
+
+7) Sample .emacs File
+---------------------
+
+Here is a sample .emacs file. It is a mix of several files, so some
+things are set multiple times. But it works :-)
+
+<.emacs>
+(defconst my-c-style
+ '((c-tab-always-indent . t)
+ (c-comment-only-line-offset . 0)
+ (c-hanging-braces-alist . ((substatement-open after)
+ (brace-list-open)))
+ (c-hanging-colons-alist . ((member-init-intro before)
+ (inher-intro)
+ (case-label after)
+ (label after)
+ (access-label after)))
+ (c-cleanup-list . (scope-operator
+ empty-defun-braces
+ defun-close-semi))
+ (c-offsets-alist . ((arglist-close . c-lineup-arglist)
+ (substatement-open . 0)
+ (case-label . +)
+ (block-open . 0)
+ (knr-argdecl-intro . -)
+ (inline-open . 0)))
+ (c-echo-syntactic-information-p . t)
+ )
+ "My C Programming Style")
+
+;; Customizations for all of c-mode, c++-mode, and objc-mode
+(defun my-c-mode-common-hook ()
+ ;; add my personal style and set it for the current buffer
+ (c-add-style "PERSONAL" my-c-style t)
+ ;; offset customizations not in my-c-style
+ (c-set-offset 'member-init-intro '++)
+ ;; other customizations
+ (setq tab-width 8
+ ;; this will make sure spaces are used instead of tabs
+ indent-tabs-mode nil)
+ (setq c-basic-offset 3)
+ ;; we like auto-newline and hungry-delete
+ (c-toggle-hungry-state 1)
+ ;; keybindings for C, C++, and Objective-C. We can put these in
+ ;; c-mode-map because c++-mode-map and objc-mode-map inherit it
+ (define-key c-mode-map [f9] 'compile)
+ (define-key c-mode-map [return] 'newline-and-indent)
+ (define-key c++-mode-map [f9] 'compile)
+ (define-key c++-mode-map [return] 'newline-and-indent)
+ (define-key java-mode-map [f9] 'compile)
+ (define-key java-mode-map [return] 'newline-and-indent)
+ (load-library "vc")
+
+ ;;for QT
+ (setq c-C++-access-key "\\<\\(signals\\|public\\|protected\\|private
+ \\|public slots\\|protected slots\\|private slots\\)\\>[ \t]*:")
+ ;; modify the colour of slots to match public, private, etc ...
+ (font-lock-add-keywords 'c++-mode
+ '(("\\<\\(slots\\|signals\\)\\>" . font-lock-type-face)))
+ ;; make new font for rest of qt keywords
+ (make-face 'qt-keywords-face)
+ (set-face-foreground 'qt-keywords-face "green")
+ ;; qt keywords
+ (font-lock-add-keywords 'c++-mode
+ '(("\\<Q_OBJECT\\>" . 'qt-keywords-face)))
+ (font-lock-add-keywords 'c++-mode
+ '(("\\<SIGNAL\\|SLOT\\>" . 'qt-keywords-face)))
+ (font-lock-add-keywords 'c++-mode
+ '(("\\<Q[A-Z][A-Za-z]*" . 'qt-keywords-face)))
+ )
+
+(setq auto-mode-alist
+ (append '(("\\.h$" . c++-mode)) auto-mode-alist))
+
+</.emacs>
+
diff --git a/kpovmodeler/TODO b/kpovmodeler/TODO
new file mode 100644
index 00000000..565d19d1
--- /dev/null
+++ b/kpovmodeler/TODO
@@ -0,0 +1,52 @@
+TODO/Wishlist for kpovmodeler
+-----------------------------
+
+Tree View
+---------
+- Leave insert errors at their original position
+- Add an option to the configuration whether transformations and maybe
+ a simple pigment should be added to new graphical objects
+
+Object Properties View
+----------------------
+
+Graphical View
+--------------
+- Zoom to object short cut
+- Invert mouse wheel option
+- Remove GLUT dependency
+- Do hidden views use CPU time?
+- Heightfield wire frame
+
+Povray Render Window
+--------------------
+
+Includes
+--------
+- Finish the library
+ * Maintain the object index in PMLibraryHandle and library_index.html
+ * Eliminate crashes when modifying a library object
+ * Implement delete in the library object preview tree
+- Build an example objects library
+
+Povray Export
+-------------
+
+General
+-------
+- All not implemented objects
+- New POV-Ray 3.5 objects and textures
+- BREP modeling with the patch object (triangles and polygons, extrusion etc.)
+- Umlauts in the truetype text object
+- Scene templates
+- Add some basic render modes to a new scenes
+- Sync the recent files list between multiple windows
+- Multiplication of objects with simple transformations
+
+Long Term
+---------
+- Support for animations
+- Shaded views, csg results
+- The whole povray syntax (macros, includes, ...)
+- Support for povray variants (megapov, pvmpov)
+- Support for more renderers
diff --git a/kpovmodeler/baseinsertrules.xml b/kpovmodeler/baseinsertrules.xml
new file mode 100644
index 00000000..24aa7dd5
--- /dev/null
+++ b/kpovmodeler/baseinsertrules.xml
@@ -0,0 +1,1039 @@
+<!DOCTYPE insertrules SYSTEM "pminsertrules.dtd">
+<insertrules format="1.0">
+
+ <definegroup name="Transformations">
+ <class name="Translate"/>
+ <class name="Scale"/>
+ <class name="Rotate"/>
+ <class name="PovrayMatrix"/>
+ </definegroup>
+
+ <definegroup name="Textures">
+ <class name="Pigment"/>
+ <class name="Normal"/>
+ <class name="Finish"/>
+ <class name="Texture"/>
+ <class name="InteriorTexture"/>
+ <class name="Interior"/>
+ <class name="Material"/>
+ </definegroup>
+
+ <definegroup name="ObjectModifier">
+ <group name="Transformations"/>
+ <group name="Textures"/>
+ <class name="BoundedBy"/>
+ <class name="ClippedBy"/>
+ <class name="Photons"/>
+ </definegroup>
+
+ <targetclass name="Blob">
+ <definegroup name="ObjectModifier">
+ <group name="Transformations"/>
+ <group name="Textures"/>
+ </definegroup>
+ <definegroup name="BlobComponents">
+ <class name="BlobCylinder"/>
+ <class name="BlobSphere"/>
+ </definegroup>
+
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <group name="ObjectModifier"/>
+ <not><before><group name="BlobComponents"/></before></not>
+ </rule>
+ <rule>
+ <group name="BlobComponents"/>
+ <not><after><group name="ObjectModifier"/></after></not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="BlobCylinder">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ <group name="Transformations"/>
+ <class name="Texture"/>
+ <class name="InteriorTexture"/>
+ <class name="Pigment"/>
+ <class name="Normal"/>
+ <class name="Finish"/>
+ </rule>
+ </targetclass>
+ <targetclass name="BlobSphere">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ <group name="Transformations"/>
+ <class name="Texture"/>
+ <class name="InteriorTexture"/>
+ <class name="Pigment"/>
+ <class name="Normal"/>
+ <class name="Finish"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="BoundedBy">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ <class name="SolidObject"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Camera">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ <group name="Transformations"/>
+ <class name="Normal"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="ClippedBy">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ <class name="SolidObject"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="CSG">
+ <definegroup name="CSGObjects">
+ <class name="GraphicalObject"/>
+ <class name="Light"/>
+ </definegroup>
+
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <group name="ObjectModifier"/>
+ <not><before><group name="CSGObjects"/></before></not>
+ </rule>
+ <rule>
+ <group name="CSGObjects"/>
+ <not><after><group name="ObjectModifier"/></after></not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="LightGroup">
+ <definegroup name="LightGroupObjects">
+ <class name="GraphicalObject"/>
+ <class name="Light"/>
+ </definegroup>
+
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <group name="ObjectModifier"/>
+ <not><before><group name="LightGroupObjects"/></before></not>
+ </rule>
+ <rule>
+ <group name="LightGroupObjects"/>
+ <not><after><group name="ObjectModifier"/></after></not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Mesh">
+ <definegroup name="MeshObjects">
+ <class name="Triangle"/>
+ </definegroup>
+
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <group name="ObjectModifier"/>
+ <not><before><group name="MeshObjects"/></before></not>
+ </rule>
+ <rule>
+ <group name="MeshObjects"/>
+ <not><after><group name="ObjectModifier"/></after></not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Triangle">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <group name="ObjectModifier"/>
+ <not><parent><class name="Mesh"/></parent></not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Declare">
+ <rule>
+ <class name="GraphicalObject"/>
+ <class name="Light"/>
+ <class name="TextureBase"/>
+ <equal>
+ <property name="numberOfChildren"/>
+ <const value="0"/>
+ </equal>
+ </rule>
+ <rule>
+ <class name="Texture"/>
+ <contains><class name="Texture"/></contains>
+ </rule>
+ <rule>
+ <class name="InteriorTexture"/>
+ <contains><class name="InteriorTexture"/></contains>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Density">
+ <definegroup name="ListPattern">
+ <class name="ColorList"/>
+ <class name="DensityList"/>
+ </definegroup>
+ <definegroup name="Map">
+ <class name="ColorMap"/>
+ <class name="DensityMap"/>
+ </definegroup>
+ <definegroup name="Sum">
+ <class name="Pattern"/>
+ <group name="Map"/>
+ <class name="Warp"/>
+ <class name="SolidColor"/>
+ <group name="ListPattern"/>
+ </definegroup>
+
+ <rule>
+ <class name="SolidColor"/>
+ <class name="ColorList"/>
+ <class name="DensityList"/>
+ <not><contains><group name="Sum"/></contains></not>
+ </rule>
+ <rule>
+ <class name="Pattern"/>
+ <and>
+ <not>
+ <contains>
+ <class name="Pattern"/>
+ <group name="ListPattern"/>
+ </contains>
+ </not>
+ <not><after><group name="Map"/></after></not>
+ <not><after><class name="Warp"/></after></not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ <not><after><group name="Transformations"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="Warp"/>
+ <after><class name="Pattern"/></after>
+ </rule>
+ <rule>
+ <group name="Map"/>
+ <and>
+ <not>
+ <contains>
+ <group name="Map"/>
+ <group name="ListPattern"/>
+ <class name="SolidColor"/>
+ </contains>
+ </not>
+ <not><before><class name="Pattern"/></before></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="QuickColor"/>
+ <group name="Transformations"/>
+ <not><before><class name="Pattern"/></before></not>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Finish">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Fog">
+ <rule>
+ <group name="Transformations"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="GraphicalObject">
+ <exception class="CSG"/>
+ <exception class="Mesh"/>
+ <rule>
+ <group name="ObjectModifier"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Interior">
+ <rule>
+ <class name="Media"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Light">
+ <rule>
+ <group name="Transformations"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="LooksLike"/>
+ <not><contains><class name="LooksLike"/></contains></not>
+ </rule>
+ <rule>
+ <class name="ProjectedThrough"/>
+ <not><contains><class name="ProjectedThrough"/></contains></not>
+ </rule>
+ <rule>
+ <class name="Photons"/>
+ <not><contains><class name="Photons"/></contains></not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="ColorList">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="SolidColor"/>
+ <or>
+ <and>
+ <equal><property name="listType"/><const value="Hexagon"/></equal>
+ <less><count><class name="SolidColor"/></count><const value="3"/></less>
+ </and>
+ <and>
+ <not><equal><property name="listType"/><const value="Hexagon"/></equal></not>
+ <less><count><class name="SolidColor"/></count><const value="2"/></less>
+ </and>
+ </or>
+ </rule>
+ </targetclass>
+
+ <targetclass name="DensityList">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="Density"/>
+ <or>
+ <and>
+ <equal><property name="listType"/><const value="Hexagon"/></equal>
+ <less><count><class name="Density"/></count><const value="3"/></less>
+ </and>
+ <and>
+ <not><equal><property name="listType"/><const value="Hexagon"/></equal></not>
+ <less><count><class name="Density"/></count><const value="2"/></less>
+ </and>
+ </or>
+ </rule>
+ </targetclass>
+
+ <targetclass name="NormalList">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="Normal"/>
+ <and>
+ <equal><property name="depth"/><const value="0.0"/></equal>
+ <or>
+ <and>
+ <equal><property name="listType"/><const value="Hexagon"/></equal>
+ <less><count><class name="Normal"/></count><const value="3"/></less>
+ </and>
+ <and>
+ <not><equal><property name="listType"/><const value="Hexagon"/></equal></not>
+ <less><count><class name="Normal"/></count><const value="2"/></less>
+ </and>
+ </or>
+ </and>
+ </rule>
+ </targetclass>
+
+ <targetclass name="PigmentList">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="Pigment"/>
+ <or>
+ <and>
+ <equal><property name="listType"/><const value="Hexagon"/></equal>
+ <less><count><class name="Pigment"/></count><const value="3"/></less>
+ </and>
+ <and>
+ <not><equal><property name="listType"/><const value="Hexagon"/></equal></not>
+ <less><count><class name="Pigment"/></count><const value="2"/></less>
+ </and>
+ </or>
+ </rule>
+ </targetclass>
+
+ <targetclass name="TextureList">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="Texture"/>
+ <or>
+ <and>
+ <equal><property name="listType"/><const value="Hexagon"/></equal>
+ <less><count><class name="Texture"/></count><const value="3"/></less>
+ </and>
+ <and>
+ <not><equal><property name="listType"/><const value="Hexagon"/></equal></not>
+ <less><count><class name="Texture"/></count><const value="2"/></less>
+ </and>
+ </or>
+ </rule>
+ </targetclass>
+
+ <targetclass name="LooksLike">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="GraphicalObject"/>
+ <not>
+ <contains>
+ <class name="GraphicalObject"/>
+ </contains>
+ </not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="ProjectedThrough">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="GraphicalObject"/>
+ <not>
+ <contains>
+ <class name="GraphicalObject"/>
+ </contains>
+ </not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="ProjectedThrough">
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ <rule>
+ <class name="GraphicalObject"/>
+ <not>
+ <contains>
+ <class name="GraphicalObject"/>
+ </contains>
+ </not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Material">
+ <rule>
+ <group name="Textures"/>
+ <group name="Transformations"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="MaterialMap">
+ <rule>
+ <class name="Comment"/>
+ <class name="Texture"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Media">
+ <rule>
+ <class name="Density"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Normal">
+ <rule>
+ <class name="BumpMap"/>
+ <not>
+ <contains>
+ <class name="BumpMap"/>
+ <class name="NormalList"/>
+ <class name="Pattern"/>
+ <class name="NormalMap"/>
+ <class name="SlopeMap"/>
+ <class name="Warp"/>
+ <class name="BlendMapModifiers"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="NormalList"/>
+ <not>
+ <contains>
+ <class name="BumpMap"/>
+ <class name="NormalList"/>
+ <class name="Pattern"/>
+ <class name="NormalMap"/>
+ <class name="SlopeMap"/>
+ <class name="Warp"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Pattern"/>
+ <and>
+ <not>
+ <contains>
+ <class name="BumpMap"/>
+ <class name="NormalList"/>
+ <class name="Pattern"/>
+ </contains>
+ </not>
+ <not><after><class name="NormalMap"/></after></not>
+ <not><after><class name="SlopeMap"/></after></not>
+ <not><after><class name="Warp"/></after></not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ <not><after><group name="Transformations"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="Warp"/>
+ <after><class name="Pattern"/></after>
+ </rule>
+ <rule>
+ <class name="NormalMap"/>
+ <and>
+ <not>
+ <contains>
+ <class name="BumpMap"/>
+ <class name="NormalMap"/>
+ <class name="NormalList"/>
+ </contains>
+ </not>
+ <not><after><class name="SlopeMap"/></after></not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ <not><before><class name="Pattern"/></before></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="SlopeMap"/>
+ <and>
+ <not>
+ <contains>
+ <class name="BumpMap"/>
+ <class name="SlopeMap"/>
+ <class name="NormalList"/>
+ </contains>
+ </not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ <not><after><group name="Transformations"/></after></not>
+ <not><before><class name="Pattern"/></before></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="BlendMapModifiers"/>
+ <and>
+ <not><contains><class name="BlendMapModifiers"/></contains></not>
+ <or>
+ <not>
+ <contains>
+ <class name="BumpMap"/>
+ <class name="NormalMap"/>
+ <class name="SlopeMap"/>
+ </contains>
+ </not>
+ <after><class name="NormalMap"/></after>
+ <after><class name="SlopeMap"/></after>
+ </or>
+ <not><before><class name="Pattern"/></before></not>
+ <not><after><group name="Transformations"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <group name="Transformations"/>
+ <not><before><class name="Pattern"/></before></not>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Pigment">
+ <definegroup name="Color">
+ <class name="SolidColor"/>
+ <class name="ImageMap"/>
+ </definegroup>
+ <definegroup name="ListPattern">
+ <class name="ColorList"/>
+ <class name="PigmentList"/>
+ </definegroup>
+ <definegroup name="Map">
+ <class name="ColorMap"/>
+ <class name="PigmentMap"/>
+ </definegroup>
+ <definegroup name="Sum">
+ <class name="Pattern"/>
+ <group name="Map"/>
+ <class name="Warp"/>
+ <group name="Color"/>
+ <group name="ListPattern"/>
+ </definegroup>
+
+ <rule>
+ <group name="Color"/>
+ <group name="ListPattern"/>
+ <not><contains><group name="Sum"/></contains></not>
+ </rule>
+ <rule>
+ <class name="Pattern"/>
+ <and>
+ <not>
+ <contains>
+ <group name="Color"/>
+ <class name="Pattern"/>
+ <group name="ListPattern"/>
+ </contains>
+ </not>
+ <not><after><group name="Map"/></after></not>
+ <not><after><class name="Warp"/></after></not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ <not><after><group name="Transformations"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="Warp"/>
+ <after><class name="Pattern"/></after>
+ </rule>
+ <rule>
+ <group name="Map"/>
+ <and>
+ <not>
+ <contains>
+ <group name="Map"/>
+ <group name="ListPattern"/>
+ <group name="Color"/>
+ </contains>
+ </not>
+ <not><before><class name="Pattern"/></before></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="BlendMapModifiers"/>
+ <and>
+ <not>
+ <contains>
+ <class name="BlendMapModifiers"/>
+ <group name="Color"/>
+ </contains>
+ </not>
+ <not><before><group name="Map"/></before></not>
+ <not><before><class name="Pattern"/></before></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="QuickColor"/>
+ <group name="Transformations"/>
+ <not><before><class name="Pattern"/></before></not>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Rainbow">
+ <rule>
+ <class name="ColorMap"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Scene">
+ <rule>
+ <class name="GraphicalObject"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ <class name="Declare"/>
+ <class name="Camera"/>
+ <class name="Light"/>
+ <class name="SkySphere"/>
+ <class name="Rainbow"/>
+ <class name="Fog"/>
+ <class name="Media"/>
+ </rule>
+ <rule>
+ <class name="GlobalSettings"/>
+ <not><contains><class name="GlobalSettings"/></contains></not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="GlobalSettings">
+ <rule>
+ <class name="Radiosity"/>
+ <not><contains><class name="Radiosity"/></contains></not>
+ </rule>
+ <rule>
+ <class name="GlobalPhotons"/>
+ <not><contains><class name="GlobalPhotons"/></contains></not>
+ </rule>
+ </targetclass>
+
+ <targetclass name="SkySphere">
+ <rule>
+ <class name="Pigment"/>
+ <group name="Transformations"/>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="Texture">
+ <definegroup name="SumMap">
+ <class name="Pattern"/>
+ <class name="TextureMap"/>
+ <class name="Warp"/>
+ </definegroup>
+ <definegroup name="SumPigment">
+ <class name="Pigment"/>
+ <class name="Normal"/>
+ <class name="Finish"/>
+ </definegroup>
+
+ <rule>
+ <class name="MaterialMap"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <group name="SumPigment"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Pigment"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <class name="Pigment"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Normal"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <class name="Normal"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Finish"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <class name="Finish"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Pattern"/>
+ <and>
+ <not>
+ <contains>
+ <class name="Pattern"/>
+ <class name="TextureList"/>
+ <group name="SumPigment"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ <not><after><class name="TextureMap"/></after></not>
+ <not><after><class name="Warp"/></after></not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ <not><after><group name="Transformations"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="TextureMap"/>
+ <and>
+ <not>
+ <contains>
+ <class name="TextureMap"/>
+ <class name="TextureList"/>
+ <group name="SumPigment"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ <not><before><class name="Pattern"/></before></not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="TextureList"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <group name="SumPigment"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Warp"/>
+ <after><class name="Pattern"/></after>
+ </rule>
+ <rule>
+ <group name="Transformations"/>
+ <not><before><class name="Pattern"/></before></not>
+ </rule>
+ <rule>
+ <class name="BlendMapModifiers"/>
+ <and>
+ <not>
+ <contains>
+ <class name="MaterialMap"/>
+ <class name="BlendMapModifiers"/>
+ </contains>
+ </not>
+ <not><before><class name="TextureMap"/></before></not>
+ <not><before><class name="Pattern"/></before></not>
+ <not><after><group name="Transformations"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="InteriorTexture">
+ <definegroup name="SumMap">
+ <class name="Pattern"/>
+ <class name="TextureMap"/>
+ <class name="Warp"/>
+ </definegroup>
+ <definegroup name="SumPigment">
+ <class name="Pigment"/>
+ <class name="Normal"/>
+ <class name="Finish"/>
+ </definegroup>
+
+ <rule>
+ <class name="MaterialMap"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <group name="SumPigment"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Pigment"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <class name="Pigment"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Normal"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <class name="Normal"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Finish"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <class name="Finish"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Pattern"/>
+ <and>
+ <not>
+ <contains>
+ <class name="Pattern"/>
+ <class name="TextureList"/>
+ <group name="SumPigment"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ <not><after><class name="TextureMap"/></after></not>
+ <not><after><class name="Warp"/></after></not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ <not><after><group name="Transformations"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="TextureMap"/>
+ <and>
+ <not>
+ <contains>
+ <class name="TextureMap"/>
+ <class name="TextureList"/>
+ <group name="SumPigment"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ <not><before><class name="Pattern"/></before></not>
+ <not><after><class name="BlendMapModifiers"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="TextureList"/>
+ <not>
+ <contains>
+ <class name="TextureList"/>
+ <group name="SumMap"/>
+ <group name="SumPigment"/>
+ <class name="MaterialMap"/>
+ </contains>
+ </not>
+ </rule>
+ <rule>
+ <class name="Warp"/>
+ <after><class name="Pattern"/></after>
+ </rule>
+ <rule>
+ <group name="Transformations"/>
+ <not><before><class name="Pattern"/></before></not>
+ </rule>
+ <rule>
+ <class name="BlendMapModifiers"/>
+ <and>
+ <not>
+ <contains>
+ <class name="MaterialMap"/>
+ <class name="BlendMapModifiers"/>
+ </contains>
+ </not>
+ <not><before><class name="TextureMap"/></before></not>
+ <not><before><class name="Pattern"/></before></not>
+ <not><after><group name="Transformations"/></after></not>
+ </and>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="TextureMap">
+ <rule>
+ <class name="Texture"/>
+ <equal><property name="hasLinkedObject"/><const value="false"/></equal>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="PigmentMap">
+ <rule>
+ <class name="Pigment"/>
+ <equal><property name="hasLinkedObject"/><const value="false"/></equal>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="ColorMap">
+ <rule>
+ <class name="SolidColor"/>
+ <equal><property name="hasLinkedObject"/><const value="false"/></equal>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="NormalMap">
+ <rule>
+ <class name="Normal"/>
+ <equal><property name="hasLinkedObject"/><const value="false"/></equal>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="SlopeMap">
+ <rule>
+ <class name="Slope"/>
+ <equal><property name="hasLinkedObject"/><const value="false"/></equal>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+
+ <targetclass name="DensityMap">
+ <rule>
+ <class name="Density"/>
+ <equal><property name="hasLinkedObject"/><const value="false"/></equal>
+ </rule>
+ <rule>
+ <class name="Comment"/>
+ <class name="Raw"/>
+ </rule>
+ </targetclass>
+</insertrules>
diff --git a/kpovmodeler/configure.in.bot b/kpovmodeler/configure.in.bot
new file mode 100644
index 00000000..da816798
--- /dev/null
+++ b/kpovmodeler/configure.in.bot
@@ -0,0 +1,37 @@
+if test "$KPOVMODELER_OPENGL" = "no"; then
+ if test "$have_gl_headers" = "no"; then
+ echo ""
+ echo "You are missing"
+ if test "$ac_cv_header_GL_gl_h" = "no"; then
+ echo " - OpenGL (mesa)"
+ fi
+ if test "$ac_cv_header_GL_glu_h" = "no"; then
+ echo " - GLU"
+ fi
+ if test "$ac_cv_header_GL_glx_h" = "no"; then
+ echo " - GLX"
+ fi
+ echo "KPovModeler will not be compiled."
+ echo "You can download them from"
+ echo "http://mesa3d.sf.net"
+ echo ""
+ else
+ echo ""
+ echo "Your system fails at linking a small OpenGL application!"
+ echo "KPovModeler will not be compiled."
+ echo "Check, if OpenGL and GLU are installed correctly on your system."
+ echo "For more details about this problem, look at config.log after"
+ echo "the line \"checking for GL\"."
+ echo ""
+ fi
+ all_tests=bad
+fi
+
+if test -z "$LIBFREETYPE_LIBS"; then
+ echo ""
+ echo "You're missing freetype2. KPovModeler will not display true type texts."
+ echo "You can download it from"
+ echo "http://www.freetype.org"
+ echo ""
+ all_tests=bad
+fi
diff --git a/kpovmodeler/configure.in.in b/kpovmodeler/configure.in.in
new file mode 100644
index 00000000..34ae508f
--- /dev/null
+++ b/kpovmodeler/configure.in.in
@@ -0,0 +1,60 @@
+have_gl_headers=yes
+can_link_gl=yes
+KPOVMODELER_OPENGL=yes;
+
+KDE_CHECK_HEADERS(GL/gl.h GL/glu.h GL/glx.h)
+if test "$ac_cv_header_GL_gl_h" = "no"; then
+ have_gl_headers=no;
+fi
+if test "$ac_cv_header_GL_glu_h" = "no"; then
+ have_gl_headers=no;
+fi
+if test "$ac_cv_header_GL_glx_h" = "no"; then
+ have_gl_headers=no;
+fi
+
+if test "$have_gl_headers" = "yes"; then
+ AC_HAVE_GL( can_link_gl=yes, can_link_gl=no )
+fi
+
+if test "$have_gl_headers" = "no"; then
+ KPOVMODELER_OPENGL=no;
+fi
+if test "$can_link_gl" = "no"; then
+ KPOVMODELER_OPENGL=no;
+fi
+
+if test "$KPOVMODELER_OPENGL" = "no"; then
+ DO_NOT_COMPILE="$DO_NOT_COMPILE kpovmodeler"
+fi
+
+
+KDE_FIND_PATH(freetype-config, FREETYPE_CONFIG, [${prefix}/bin ${exec_prefix}/bin /usr/local/bin /opt/local/bin])
+
+if test -n "$FREETYPE_CONFIG"; then
+ vers=`$FREETYPE_CONFIG --version 2>/dev/null | sed -e 's/libfreetype //' | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
+ if test -n "$vers" && test "$vers" -ge 5000000
+ then
+ LIBFREETYPE_LIBS="`$FREETYPE_CONFIG --libs`"
+ LIBFREETYPE_RPATH=
+ for args in $LIBFREETYPE_LIBS; do
+ case $args in
+ -L*)
+ LIBFREETYPE_RPATH="$LIBFREETYPE_RPATH $args"
+ ;;
+ esac
+ done
+ LIBFREETYPE_RPATH=`echo $LIBFREETYPE_RPATH | sed -e "s/-L/-R/g"`
+ LIBFREETYPE_CFLAGS="`$FREETYPE_CONFIG --cflags`"
+
+ AC_DEFINE_UNQUOTED(HAVE_FREETYPE, 1, [Defines if your system has the libfreetype library])
+ AC_MSG_RESULT([libraries $LIBFREETYPE_LIBS, headers $LIBFREETYPE_CFLAGS])
+ else
+ AC_MSG_WARN([You need at least libfreetype 5.0])
+ fi
+fi
+
+
+AC_SUBST(LIBFREETYPE_LIBS)
+AC_SUBST(LIBFREETYPE_CFLAGS)
+AC_SUBST(LIBFREETYPE_RPATH)
diff --git a/kpovmodeler/cr16-mime-kpovmodeler_doc.png b/kpovmodeler/cr16-mime-kpovmodeler_doc.png
new file mode 100644
index 00000000..7ece4cce
--- /dev/null
+++ b/kpovmodeler/cr16-mime-kpovmodeler_doc.png
Binary files differ
diff --git a/kpovmodeler/cr32-mime-kpovmodeler_doc.png b/kpovmodeler/cr32-mime-kpovmodeler_doc.png
new file mode 100644
index 00000000..32f0d2a5
--- /dev/null
+++ b/kpovmodeler/cr32-mime-kpovmodeler_doc.png
Binary files differ
diff --git a/kpovmodeler/cr48-mime-kpovmodeler_doc.png b/kpovmodeler/cr48-mime-kpovmodeler_doc.png
new file mode 100644
index 00000000..ec8bf13e
--- /dev/null
+++ b/kpovmodeler/cr48-mime-kpovmodeler_doc.png
Binary files differ
diff --git a/kpovmodeler/examples/Makefile.am b/kpovmodeler/examples/Makefile.am
new file mode 100644
index 00000000..4ad27f9a
--- /dev/null
+++ b/kpovmodeler/examples/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = scenes includes \ No newline at end of file
diff --git a/kpovmodeler/examples/includes/Makefile.am b/kpovmodeler/examples/includes/Makefile.am
new file mode 100644
index 00000000..9d7b21f2
--- /dev/null
+++ b/kpovmodeler/examples/includes/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = inlined original \ No newline at end of file
diff --git a/kpovmodeler/examples/includes/inlined/Makefile.am b/kpovmodeler/examples/includes/inlined/Makefile.am
new file mode 100644
index 00000000..f798eb8b
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/Makefile.am
@@ -0,0 +1,4 @@
+exdir = $(kde_datadir)/kpovmodeler/examples/includes/inlined
+ex_DATA = chars.kpm finish.kpm glass.kpm golds.kpm metals.kpm shapes.kpm \
+ shapes2.kpm shapesq.kpm skies.kpm stars.kpm stones1.kpm stones2.kpm \
+ textures.kpm woods.kpm \ No newline at end of file
diff --git a/kpovmodeler/examples/includes/inlined/chars.kpm b/kpovmodeler/examples/includes/inlined/chars.kpm
new file mode 100644
index 00000000..606e7db0
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/chars.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/finish.kpm b/kpovmodeler/examples/includes/inlined/finish.kpm
new file mode 100644
index 00000000..d7131c4d
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/finish.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/glass.kpm b/kpovmodeler/examples/includes/inlined/glass.kpm
new file mode 100644
index 00000000..329b68e1
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/glass.kpm
@@ -0,0 +1,141 @@
+<!DOCTYPE KPOVMODELER>
+<scene minorFormat="0" majorFormat="1" visibility_level="10" >
+ <extra_data>
+ <rendermode sampling_method="0" width="640" subsection="0" antialiasing="0" end_column="640" start_row="1" radiosity="0" height="480" alpha="0" start_column="1" end_row="480" aa_depth="2" aa_jitter="0" aa_jitter_amount="1" aa_threshold="0.3" quality="9" description="Default" />
+ </extra_data>
+ <comment>
+Persistence of Vision Raytracer Version 3.1
+Glass finishes and textures
+</comment>
+ <comment>Changes in ver. 3.1 moved refraction and ior to the interior statment.
+Use I_Glass in conjunction with each of the finish statments below.</comment>
+ <comment>Glass Interior</comment>
+ <declare id="I_Glass" >
+ <interior enable_fade_power="0" fade_power="0" fade_distance="0" caustics="0" ior="1.5" enable_ior="1" enable_fade_distance="0" enable_caustics="0" name="" />
+ </declare>
+ <comment>Glass Finishes</comment>
+ <declare id="F_Glass1" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0 0 0 0 0" reflection="0.1 0.1 0.1 0.1 0.1" diffuse="0" name="" specular="1" phongsize="40" enable_crand="0" />
+ </declare>
+ <declare id="F_Glass2" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="0" enable_specular="0" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.05" enable_phong_size="1" enable_phong="1" irid_thickness="0" phong="0.3" ambient="0 0 0 0 0" reflection="0.5 0.5 0.5 0.5 0.5" diffuse="0" name="" specular="0" phongsize="60" enable_crand="0" />
+ </declare>
+ <declare id="F_Glass3" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.003" enable_phong_size="1" enable_phong="1" irid_thickness="0" phong="1" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.1 0.1 0.1 0.1 0.1" diffuse="0.1" name="" specular="0.8" phongsize="400" enable_crand="0" />
+ </declare>
+ <declare id="F_Glass4" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ </declare>
+ <comment>Glass Textures</comment>
+ <comment>Simple clear glass</comment>
+ <declare id="T_Glass1" >
+ <texture name="" >
+ <pigment name="" >
+ <solidcolor color="1 1 1 0.7 0" />
+ </pigment>
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0 0 0 0 0" reflection="0.1 0.1 0.1 0.1 0.1" diffuse="0" name="" specular="1" phongsize="40" enable_crand="0" />
+ </texture>
+ </declare>
+ <comment>More like an acrylic plastic</comment>
+ <declare id="T_Glass2" >
+ <texture name="" >
+ <pigment name="" >
+ <solidcolor color="1 1 1 1 0" />
+ </pigment>
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="0" enable_specular="0" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.05" enable_phong_size="1" enable_phong="1" irid_thickness="0" phong="0.3" ambient="0 0 0 0 0" reflection="0.5 0.5 0.5 0.5 0.5" diffuse="0" name="" specular="0" phongsize="60" enable_crand="0" />
+ </texture>
+ </declare>
+ <comment>An excellent lead crystal glass!</comment>
+ <declare id="T_Glass3" >
+ <texture name="" >
+ <pigment name="" >
+ <solidcolor color="0.98 0.98 0.98 0.9 0" />
+ </pigment>
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.003" enable_phong_size="1" enable_phong="1" irid_thickness="0" phong="1" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.1 0.1 0.1 0.1 0.1" diffuse="0.1" name="" specular="0.8" phongsize="400" enable_crand="0" />
+ </texture>
+ </declare>
+ <declare id="T_Glass4" >
+ <texture name="" >
+ <pigment name="" >
+ <solidcolor color="0.98 1 0.99 0.75 0" />
+ </pigment>
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ </texture>
+ </declare>
+ <declare id="T_Old_Glass" >
+ <texture name="" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ <pigment name="" >
+ <solidcolor color="0.8 0.9 0.85 0.85 0" />
+ </pigment>
+ </texture>
+ </declare>
+ <declare id="T_Winebottle_Glass" >
+ <texture name="" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ <pigment name="" >
+ <solidcolor color="0.4 0.72 0.4 0.6 0" />
+ </pigment>
+ </texture>
+ </declare>
+ <declare id="T_Beerbottle_Glass" >
+ <texture name="" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ <pigment name="" >
+ <solidcolor color="0.7 0.5 0.1 0.6 0" />
+ </pigment>
+ </texture>
+ </declare>
+ <comment>A few color variations on Norm's glass
+Ruby glass</comment>
+ <declare id="T_Ruby_Glass" >
+ <texture name="" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ <pigment name="" >
+ <solidcolor color="0.9 0.1 0.2 0.8 0" />
+ </pigment>
+ </texture>
+ </declare>
+ <declare id="T_Green_Glass" >
+ <texture name="" >
+ <pigment name="" >
+ <solidcolor color="0.8 1 0.95 0.9 0" />
+ </pigment>
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.003" enable_phong_size="1" enable_phong="1" irid_thickness="0" phong="1" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.1 0.1 0.1 0.1 0.1" diffuse="0.1" name="" specular="0.8" phongsize="400" enable_crand="0" />
+ </texture>
+ </declare>
+ <declare id="T_Dark_Green_Glass" >
+ <texture name="" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ <pigment name="" >
+ <solidcolor color="0.1 0.7 0.8 0.8 0" />
+ </pigment>
+ </texture>
+ </declare>
+ <declare id="T_Yellow_Glass" >
+ <texture name="" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ <pigment name="" >
+ <solidcolor color="0.8 0.8 0.2 0.8 0" />
+ </pigment>
+ </texture>
+ </declare>
+ <comment>Orange/Amber glass</comment>
+ <declare id="T_Orange_Glass" >
+ <texture name="" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ <pigment name="" >
+ <solidcolor color="1 0.5 0 0.8 0" />
+ </pigment>
+ </texture>
+ </declare>
+ <comment>Vicks bottle, glass</comment>
+ <declare id="T_Vicksbottle_Glass" >
+ <texture name="" >
+ <finish enable_brilliance="0" enable_metallic="0" enable_exponent="0" enable_diffuse="1" metallic="1" enable_reflection="1" irid_turbulence="0" irid="0" crand="0" brilliance="1" enable_roughness="1" enable_specular="1" enable_ambient="1" irid_amount="0" reflection_exponent="1" roughness="0.001" enable_phong_size="0" enable_phong="0" irid_thickness="0" phong="0" ambient="0.1 0.1 0.1 0.1 0.1" reflection="0.25 0.25 0.25 0.25 0.25" diffuse="0.1" name="" specular="1" phongsize="40" enable_crand="0" />
+ <pigment name="" >
+ <solidcolor color="0.1 0.15 0.5 0.9 0" />
+ </pigment>
+ </texture>
+ </declare>
+</scene>
diff --git a/kpovmodeler/examples/includes/inlined/golds.kpm b/kpovmodeler/examples/includes/inlined/golds.kpm
new file mode 100644
index 00000000..91feeca0
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/golds.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/metals.kpm b/kpovmodeler/examples/includes/inlined/metals.kpm
new file mode 100644
index 00000000..80f7f432
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/metals.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/shapes.kpm b/kpovmodeler/examples/includes/inlined/shapes.kpm
new file mode 100644
index 00000000..0390613d
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/shapes.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/shapes2.kpm b/kpovmodeler/examples/includes/inlined/shapes2.kpm
new file mode 100644
index 00000000..72421aef
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/shapes2.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/shapesq.kpm b/kpovmodeler/examples/includes/inlined/shapesq.kpm
new file mode 100644
index 00000000..3aa691b6
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/shapesq.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/skies.kpm b/kpovmodeler/examples/includes/inlined/skies.kpm
new file mode 100644
index 00000000..9c4ff952
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/skies.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/stars.kpm b/kpovmodeler/examples/includes/inlined/stars.kpm
new file mode 100644
index 00000000..9ec844a6
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/stars.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/stones1.kpm b/kpovmodeler/examples/includes/inlined/stones1.kpm
new file mode 100644
index 00000000..67ddadfe
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/stones1.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/stones2.kpm b/kpovmodeler/examples/includes/inlined/stones2.kpm
new file mode 100644
index 00000000..955052e5
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/stones2.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/textures.kpm b/kpovmodeler/examples/includes/inlined/textures.kpm
new file mode 100644
index 00000000..4f5d3dc9
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/textures.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/inlined/woods.kpm b/kpovmodeler/examples/includes/inlined/woods.kpm
new file mode 100644
index 00000000..f5b12879
--- /dev/null
+++ b/kpovmodeler/examples/includes/inlined/woods.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/Makefile.am b/kpovmodeler/examples/includes/original/Makefile.am
new file mode 100644
index 00000000..544ecd09
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/Makefile.am
@@ -0,0 +1,4 @@
+exdir = $(kde_datadir)/kpovmodeler/examples/includes/original
+ex_DATA = chars.kpm finish.kpm glass.kpm golds.kpm metals.kpm shapes.kpm \
+ shapes2.kpm shapesq.kpm skies.kpm stars.kpm stones1.kpm stones2.kpm \
+ textures.kpm woods.kpm \ No newline at end of file
diff --git a/kpovmodeler/examples/includes/original/chars.kpm b/kpovmodeler/examples/includes/original/chars.kpm
new file mode 100644
index 00000000..1f16af27
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/chars.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/finish.kpm b/kpovmodeler/examples/includes/original/finish.kpm
new file mode 100644
index 00000000..57964af6
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/finish.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/glass.kpm b/kpovmodeler/examples/includes/original/glass.kpm
new file mode 100644
index 00000000..9750c57a
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/glass.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/golds.kpm b/kpovmodeler/examples/includes/original/golds.kpm
new file mode 100644
index 00000000..d11b632b
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/golds.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/metals.kpm b/kpovmodeler/examples/includes/original/metals.kpm
new file mode 100644
index 00000000..c5634789
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/metals.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/shapes.kpm b/kpovmodeler/examples/includes/original/shapes.kpm
new file mode 100644
index 00000000..e587d44b
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/shapes.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/shapes2.kpm b/kpovmodeler/examples/includes/original/shapes2.kpm
new file mode 100644
index 00000000..206f375a
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/shapes2.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/shapesq.kpm b/kpovmodeler/examples/includes/original/shapesq.kpm
new file mode 100644
index 00000000..416d190e
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/shapesq.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/skies.kpm b/kpovmodeler/examples/includes/original/skies.kpm
new file mode 100644
index 00000000..e5c65c04
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/skies.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/stars.kpm b/kpovmodeler/examples/includes/original/stars.kpm
new file mode 100644
index 00000000..b17cb306
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/stars.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/stones1.kpm b/kpovmodeler/examples/includes/original/stones1.kpm
new file mode 100644
index 00000000..0753b49e
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/stones1.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/stones2.kpm b/kpovmodeler/examples/includes/original/stones2.kpm
new file mode 100644
index 00000000..16438514
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/stones2.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/textures.kpm b/kpovmodeler/examples/includes/original/textures.kpm
new file mode 100644
index 00000000..ae6cca1f
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/textures.kpm
Binary files differ
diff --git a/kpovmodeler/examples/includes/original/woods.kpm b/kpovmodeler/examples/includes/original/woods.kpm
new file mode 100644
index 00000000..4cdca2ec
--- /dev/null
+++ b/kpovmodeler/examples/includes/original/woods.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/Makefile.am b/kpovmodeler/examples/scenes/Makefile.am
new file mode 100644
index 00000000..090e2230
--- /dev/null
+++ b/kpovmodeler/examples/scenes/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = advanced csg interior lights objects \ No newline at end of file
diff --git a/kpovmodeler/examples/scenes/advanced/Makefile.am b/kpovmodeler/examples/scenes/advanced/Makefile.am
new file mode 100644
index 00000000..42f8c53c
--- /dev/null
+++ b/kpovmodeler/examples/scenes/advanced/Makefile.am
@@ -0,0 +1,2 @@
+exdir = $(kde_datadir)/kpovmodeler/examples/scenes/advanced
+ex_DATA = ants.kpm bee.kpm ink.kpm table.kpm \ No newline at end of file
diff --git a/kpovmodeler/examples/scenes/advanced/ants.kpm b/kpovmodeler/examples/scenes/advanced/ants.kpm
new file mode 100644
index 00000000..c84bd68d
--- /dev/null
+++ b/kpovmodeler/examples/scenes/advanced/ants.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/advanced/bee.kpm b/kpovmodeler/examples/scenes/advanced/bee.kpm
new file mode 100644
index 00000000..9f594df3
--- /dev/null
+++ b/kpovmodeler/examples/scenes/advanced/bee.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/advanced/ink.kpm b/kpovmodeler/examples/scenes/advanced/ink.kpm
new file mode 100644
index 00000000..036ef168
--- /dev/null
+++ b/kpovmodeler/examples/scenes/advanced/ink.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/advanced/table.kpm b/kpovmodeler/examples/scenes/advanced/table.kpm
new file mode 100644
index 00000000..1fdddccd
--- /dev/null
+++ b/kpovmodeler/examples/scenes/advanced/table.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/csg/Makefile.am b/kpovmodeler/examples/scenes/csg/Makefile.am
new file mode 100644
index 00000000..c63d4ae8
--- /dev/null
+++ b/kpovmodeler/examples/scenes/csg/Makefile.am
@@ -0,0 +1,2 @@
+exdir = $(kde_datadir)/kpovmodeler/examples/scenes/csg
+ex_DATA = cheese.kpm emptybox.kpm heightfield.kpm \ No newline at end of file
diff --git a/kpovmodeler/examples/scenes/csg/cheese.kpm b/kpovmodeler/examples/scenes/csg/cheese.kpm
new file mode 100644
index 00000000..215ec50d
--- /dev/null
+++ b/kpovmodeler/examples/scenes/csg/cheese.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/csg/emptybox.kpm b/kpovmodeler/examples/scenes/csg/emptybox.kpm
new file mode 100644
index 00000000..e917ba21
--- /dev/null
+++ b/kpovmodeler/examples/scenes/csg/emptybox.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/csg/heightfield.kpm b/kpovmodeler/examples/scenes/csg/heightfield.kpm
new file mode 100644
index 00000000..051b25ea
--- /dev/null
+++ b/kpovmodeler/examples/scenes/csg/heightfield.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/interior/Makefile.am b/kpovmodeler/examples/scenes/interior/Makefile.am
new file mode 100644
index 00000000..7d8e4e22
--- /dev/null
+++ b/kpovmodeler/examples/scenes/interior/Makefile.am
@@ -0,0 +1,2 @@
+exdir = $(kde_datadir)/kpovmodeler/examples/scenes/interior
+ex_DATA = cubes.kpm media1.kpm media2.kpm media3.kpm spheres.kpm \ No newline at end of file
diff --git a/kpovmodeler/examples/scenes/interior/cubes.kpm b/kpovmodeler/examples/scenes/interior/cubes.kpm
new file mode 100644
index 00000000..30f516c9
--- /dev/null
+++ b/kpovmodeler/examples/scenes/interior/cubes.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/interior/media1.kpm b/kpovmodeler/examples/scenes/interior/media1.kpm
new file mode 100644
index 00000000..94938e69
--- /dev/null
+++ b/kpovmodeler/examples/scenes/interior/media1.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/interior/media2.kpm b/kpovmodeler/examples/scenes/interior/media2.kpm
new file mode 100644
index 00000000..bae2c746
--- /dev/null
+++ b/kpovmodeler/examples/scenes/interior/media2.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/interior/media3.kpm b/kpovmodeler/examples/scenes/interior/media3.kpm
new file mode 100644
index 00000000..b9215dfa
--- /dev/null
+++ b/kpovmodeler/examples/scenes/interior/media3.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/interior/spheres.kpm b/kpovmodeler/examples/scenes/interior/spheres.kpm
new file mode 100644
index 00000000..059bee3b
--- /dev/null
+++ b/kpovmodeler/examples/scenes/interior/spheres.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/lights/Makefile.am b/kpovmodeler/examples/scenes/lights/Makefile.am
new file mode 100644
index 00000000..9b1f5ad5
--- /dev/null
+++ b/kpovmodeler/examples/scenes/lights/Makefile.am
@@ -0,0 +1,2 @@
+exdir = $(kde_datadir)/kpovmodeler/examples/scenes/lights
+ex_DATA = arealight.kpm arealight2.kpm spotlight.kpm \ No newline at end of file
diff --git a/kpovmodeler/examples/scenes/lights/arealight.kpm b/kpovmodeler/examples/scenes/lights/arealight.kpm
new file mode 100644
index 00000000..d02a893d
--- /dev/null
+++ b/kpovmodeler/examples/scenes/lights/arealight.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/lights/arealight2.kpm b/kpovmodeler/examples/scenes/lights/arealight2.kpm
new file mode 100644
index 00000000..21d2e772
--- /dev/null
+++ b/kpovmodeler/examples/scenes/lights/arealight2.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/lights/spotlight.kpm b/kpovmodeler/examples/scenes/lights/spotlight.kpm
new file mode 100644
index 00000000..925fb7c3
--- /dev/null
+++ b/kpovmodeler/examples/scenes/lights/spotlight.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/objects/Makefile.am b/kpovmodeler/examples/scenes/objects/Makefile.am
new file mode 100644
index 00000000..bfa14dce
--- /dev/null
+++ b/kpovmodeler/examples/scenes/objects/Makefile.am
@@ -0,0 +1,3 @@
+exdir = $(kde_datadir)/kpovmodeler/examples/scenes/objects
+ex_DATA = allobjects.kpm fractals.kpm lathe.kpm prism.kpm sor.kpm \
+ superellipsoid.kpm text.kpm \ No newline at end of file
diff --git a/kpovmodeler/examples/scenes/objects/allobjects.kpm b/kpovmodeler/examples/scenes/objects/allobjects.kpm
new file mode 100644
index 00000000..10136a71
--- /dev/null
+++ b/kpovmodeler/examples/scenes/objects/allobjects.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/objects/fractals.kpm b/kpovmodeler/examples/scenes/objects/fractals.kpm
new file mode 100644
index 00000000..a0e83171
--- /dev/null
+++ b/kpovmodeler/examples/scenes/objects/fractals.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/objects/lathe.kpm b/kpovmodeler/examples/scenes/objects/lathe.kpm
new file mode 100644
index 00000000..64e8691a
--- /dev/null
+++ b/kpovmodeler/examples/scenes/objects/lathe.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/objects/prism.kpm b/kpovmodeler/examples/scenes/objects/prism.kpm
new file mode 100644
index 00000000..c6b5cd19
--- /dev/null
+++ b/kpovmodeler/examples/scenes/objects/prism.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/objects/sor.kpm b/kpovmodeler/examples/scenes/objects/sor.kpm
new file mode 100644
index 00000000..cddea81e
--- /dev/null
+++ b/kpovmodeler/examples/scenes/objects/sor.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/objects/superellipsoid.kpm b/kpovmodeler/examples/scenes/objects/superellipsoid.kpm
new file mode 100644
index 00000000..35810e6e
--- /dev/null
+++ b/kpovmodeler/examples/scenes/objects/superellipsoid.kpm
Binary files differ
diff --git a/kpovmodeler/examples/scenes/objects/text.kpm b/kpovmodeler/examples/scenes/objects/text.kpm
new file mode 100644
index 00000000..f7c84beb
--- /dev/null
+++ b/kpovmodeler/examples/scenes/objects/text.kpm
Binary files differ
diff --git a/kpovmodeler/hi16-app-kpovmodeler.png b/kpovmodeler/hi16-app-kpovmodeler.png
new file mode 100644
index 00000000..a6f1b945
--- /dev/null
+++ b/kpovmodeler/hi16-app-kpovmodeler.png
Binary files differ
diff --git a/kpovmodeler/hi22-app-kpovmodeler.png b/kpovmodeler/hi22-app-kpovmodeler.png
new file mode 100644
index 00000000..218417bd
--- /dev/null
+++ b/kpovmodeler/hi22-app-kpovmodeler.png
Binary files differ
diff --git a/kpovmodeler/hi32-app-kpovmodeler.png b/kpovmodeler/hi32-app-kpovmodeler.png
new file mode 100644
index 00000000..07ffa8bb
--- /dev/null
+++ b/kpovmodeler/hi32-app-kpovmodeler.png
Binary files differ
diff --git a/kpovmodeler/hi48-app-kpovmodeler.png b/kpovmodeler/hi48-app-kpovmodeler.png
new file mode 100644
index 00000000..904a39cf
--- /dev/null
+++ b/kpovmodeler/hi48-app-kpovmodeler.png
Binary files differ
diff --git a/kpovmodeler/kdoc.rules b/kpovmodeler/kdoc.rules
new file mode 100644
index 00000000..6b5d40a6
--- /dev/null
+++ b/kpovmodeler/kdoc.rules
@@ -0,0 +1,10 @@
+# These are the rules used by makekdedoc to generate the kpovmodeler
+# documentation with KDOC.
+#
+# $Id$
+
+kde_MODULES = kpovmodeler
+
+kpovmodeler_FILES = *.h
+kpovmodeler_LIBS = -lkdeui -lkparts -lkdecore -ldcop -lkfile -lkio -lqt -p
+kpovmodeler_PATH = . \ No newline at end of file
diff --git a/kpovmodeler/kpovmodeler.desktop b/kpovmodeler/kpovmodeler.desktop
new file mode 100644
index 00000000..49e0844c
--- /dev/null
+++ b/kpovmodeler/kpovmodeler.desktop
@@ -0,0 +1,59 @@
+[Desktop Entry]
+DocPath=kpovmodeler/index.html
+Exec=kpovmodeler -caption "%c" %i %m %f
+Icon=kpovmodeler
+MimeType=application/x-kpovmodeler;
+Name=KPovModeler
+Name[eo]=KPovModelilo
+Name[es]=Modelador Povray
+Name[he]=מעצב Povray
+Name[nb]=KPov-modellerer
+Name[ne]=केडीई पोभ मोडेलर
+Name[nn]=KPov-modellering
+Name[sv]=Kpovmodeler
+GenericName=Povray Modeler
+GenericName[ca]=Modelador Povray
+GenericName[cs]=Modelář Povray
+GenericName[cy]=Modelydd Povray
+GenericName[da]=Povray-modellering
+GenericName[de]=Povray-Modellierer
+GenericName[en_GB]=Povray Modeller
+GenericName[eo]=Povray-modelilo
+GenericName[es]=Modelador Povray
+GenericName[et]=Povray modelleerija
+GenericName[eu]=Povray modelatzailea
+GenericName[fa]=سازندۀ مدل Povray
+GenericName[fi]=Povray-mallintaja
+GenericName[fr]=Modeleur Povray
+GenericName[gl]=Modelador Povray
+GenericName[he]=מעצב Povray
+GenericName[hu]=Povray-modellező
+GenericName[is]=Povray hönnuður
+GenericName[it]=Modellatore per Povray
+GenericName[ja]=Povray モデラー
+GenericName[kk]=Povray үлгілеу
+GenericName[km]=កម្មវិធី​ធ្វើ​ម៉ូដែល Povray
+GenericName[ms]=Pemodel Povray
+GenericName[nb]=Povray-modellerer
+GenericName[nds]=Povray-Modellmaker
+GenericName[ne]=पोभ्रे मोडेलर
+GenericName[nn]=Povray-modellering
+GenericName[pl]=Modeler Povray
+GenericName[pt]=Modelador de Povray
+GenericName[pt_BR]=Modelador Povray
+GenericName[ro]=Modelator Povray
+GenericName[ru]=Редактор Povray
+GenericName[sl]=Modelirnik Povray
+GenericName[sr]=Моделар за Povray
+GenericName[sr@Latn]=Modelar za Povray
+GenericName[sv]=Modellering med Povray
+GenericName[ta]=பாவ்ரே மாடுல்லர்
+GenericName[tr]=Povray Modelleyici
+GenericName[zh_CN]=Povray 建模器
+GenericName[zh_HK]=Povray 建模器
+Path=
+ServiceTypes=KParts/ReadOnlyPart,KParts/ReadWritePart,Browser/View,KPovModeler/Document
+Terminal=false
+Type=Application
+X-KDE-Library=libkpovmodelerpart
+Categories=Qt;KDE;Graphics;
diff --git a/kpovmodeler/kpovmodelerbrowser.rc b/kpovmodeler/kpovmodelerbrowser.rc
new file mode 100644
index 00000000..9640121f
--- /dev/null
+++ b/kpovmodeler/kpovmodelerbrowser.rc
@@ -0,0 +1,21 @@
+<!DOCTYPE kpartgui>
+<kpartgui name="KPovModelerPart" version="1">
+<MenuBar>
+ <Menu name="edit"><text>&amp;Edit</text>
+ <Action name="edit_cut"/>
+ <Action name="edit_copy"/>
+ <Action name="edit_paste"/>
+ <Action name="edit_delete"/>
+ </Menu>
+</MenuBar>
+
+<ToolBar name="mainToolBar">
+ <Action name="edit_undo"/>
+ <Action name="edit_redo"/>
+ <Separator/>
+ <Action name="edit_cut"/>
+ <Action name="edit_copy"/>
+ <Action name="edit_paste"/>
+ <Action name="edit_delete"/>
+</ToolBar>
+</kpartgui>
diff --git a/kpovmodeler/kpovmodelershell.rc b/kpovmodeler/kpovmodelershell.rc
new file mode 100644
index 00000000..cea9e017
--- /dev/null
+++ b/kpovmodeler/kpovmodelershell.rc
@@ -0,0 +1,58 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui name="KPovModelerShell" version="7">
+<MenuBar>
+ <Menu name="file"><text>&amp;File</text>
+ <DefineGroup name="file_export_actions" append="save_merge"/>
+ <DefineGroup name="file_import_actions" append="open_merge"/>
+ </Menu>
+ <Menu name="edit"><text>&amp;Edit</text>
+ <MergeLocal/>
+ </Menu>
+ <Menu name="insert"><text>&amp;Insert</text>
+ <MergeLocal/>
+ </Menu>
+ <Menu name="view"><text>&amp;View</text>
+ <Action name="view_new_treeview"/>
+ <Action name="view_new_dialogview"/>
+ <Action name="view_new_librarybrowser"/>
+ <DefineGroup name="view_new_views_merge"/>
+ <Separator/>
+ <Action name="view_new_topview"/>
+ <Action name="view_new_bottomview"/>
+ <Action name="view_new_leftview"/>
+ <Action name="view_new_rightview"/>
+ <Action name="view_new_frontview"/>
+ <Action name="view_new_backview"/>
+ <Action name="view_new_cameraview"/>
+ <Separator/>
+ <Action name="view_layouts_menu"/>
+ <Action name="save_view_layout"/>
+ <Separator/>
+ <MergeLocal/>
+ </Menu>
+ <Menu name="settings"><text>&amp;Settings</text>
+ <Action name="options_show_path" append="show_merge"/>
+ </Menu>
+ <Merge/>
+</MenuBar>
+
+<ToolBar name="mainToolBar" noMerge="1"><text>Main Toolbar</text>
+ <Action name="file_new"/>
+ <Action name="file_open"/>
+ <Action name="file_save"/>
+ <Action name="file_print"/>
+ <Action name="file_print_preview"/>
+ <Action name="file_mail"/>
+ <Separator/>
+ <Merge/>
+</ToolBar>
+
+<ToolBar name="libraryToolbar" noMerge="1"><text>Library Toolbar</text>
+ <Action name="library_up"/>
+ <Action name="library_object_new"/>
+ <Action name="library_object_edit"/>
+ <Action name="library_object_delete"/>
+</ToolBar>
+
+</kpartgui>
+
diff --git a/kpovmodeler/kpovmodelerui.rc b/kpovmodeler/kpovmodelerui.rc
new file mode 100644
index 00000000..007257b6
--- /dev/null
+++ b/kpovmodeler/kpovmodelerui.rc
@@ -0,0 +1,303 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui name="KPovModelerPart" version="14">
+
+<MenuBar>
+ <Menu name="file"><text>&amp;File</text>
+ <Action name="file_export" group="file_export_actions"/>
+ <Action name="file_import" group="file_import_actions"/>
+ </Menu>
+ <Menu name="edit"><text>&amp;Edit</text>
+ <Action name="edit_undo"/>
+ <Action name="edit_redo"/>
+ <Separator/>
+ <Action name="edit_cut"/>
+ <Action name="edit_copy"/>
+ <Action name="edit_paste"/>
+ <Action name="edit_delete"/>
+ </Menu>
+ <Menu name="insert"><text context="Insert menu">&amp;Insert</text>
+ <Action name="new_globalsettings"/>
+ <Action name="new_radiosity"/>
+ <Action name="new_globalphotons"/>
+ <Separator/>
+ <Action name="new_declare"/>
+ <Separator/>
+ <Action name="new_clippedby"/>
+ <Action name="new_boundedby"/>
+ <Separator/>
+ <Action name="new_light"/>
+ <Action name="new_lightgroup"/>
+ <Action name="new_lookslike"/>
+ <Action name="new_projectedthrough"/>
+ <Action name="new_camera"/>
+ <Separator/>
+ <Action name="new_comment"/>
+ <Action name="new_raw"/>
+ <Separator/>
+ <Menu name="finite_solid_objects"><text>Finite Solid Primitives</text>
+ <Action name="new_box"/>
+ <Action name="new_sphere"/>
+ <Action name="new_cylinder"/>
+ <Action name="new_cone"/>
+ <Action name="new_torus"/>
+ <Action name="new_superquadricellipsoid"/>
+ <Action name="new_heightfield"/>
+ <Action name="new_text"/>
+ <Action name="new_juliafractal"/>
+ <Action name="new_isosurface"/>
+ <Separator/>
+ <Action name="new_blob"/>
+ <Action name="new_blobsphere"/>
+ <Action name="new_blobcylinder"/>
+ <Separator/>
+ <Action name="new_lathe"/>
+ <Action name="new_prism"/>
+ <Action name="new_surfaceofrevolution"/>
+ <Action name="new_spheresweep"/>
+ <Separator/>
+ <Action name="new_objectlink"/>
+ </Menu>
+ <Menu name="finite_patch_objects"><text>Finite Patch Primitives</text>
+ <Action name="new_disc"/>
+ <Action name="new_bicubicpatch"/>
+ <Action name="new_triangle"/>
+ <Action name="new_mesh"/>
+ </Menu>
+ <Menu name="infinite_solid_objects"><text>Infinite Solid Primitives</text>
+ <Action name="new_plane"/>
+ <Action name="new_polynom"/>
+ </Menu>
+ <Menu name="csg_objects"><text>Constructive Solid Geometry</text>
+ <Action name="new_union"/>
+ <Action name="new_intersection"/>
+ <Action name="new_difference"/>
+ <Action name="new_merge"/>
+ </Menu>
+ <Separator/>
+ <Menu name="material_objects"><text>Material</text>
+ <Action name="new_material"/>
+ </Menu>
+ <Menu name="interior_objects"><text>Interior</text>
+ <Action name="new_interior"/>
+ <Action name="new_media"/>
+ <Action name="new_density"/>
+ <Action name="new_densitylist"/>
+ <Action name="new_densitymap"/>
+ </Menu>
+ <Menu name="texture_objects"><text>Textures</text>
+ <Action name="new_pattern"/>
+ <Action name="new_blendmapmodifiers"/>
+ <Action name="new_warp"/>
+ <Separator/>
+ <Action name="new_texture"/>
+ <Action name="new_interiortexture"/>
+ <Action name="new_texturelist"/>
+ <Action name="new_texturemap"/>
+ <Action name="new_materialmap"/>
+ <Action name="new_pigment"/>
+ <Action name="new_pigmentlist"/>
+ <Action name="new_pigmentmap"/>
+ <Action name="new_imagemap"/>
+ <Action name="new_solidcolor"/>
+ <Action name="new_colorlist"/>
+ <Action name="new_colormap"/>
+ <Action name="new_normal"/>
+ <Action name="new_normallist"/>
+ <Action name="new_normalmap"/>
+ <Action name="new_bumpmap"/>
+ <Action name="new_slope"/>
+ <Action name="new_slopemap"/>
+ <Action name="new_finish"/>
+ <Separator/>
+ <Action name="new_quickcolor"/>
+ </Menu>
+ <Menu name="photons_objects"><text>Photons</text>
+ <Action name="new_photons"/>
+ </Menu>
+ <Menu name="atmospheric_objects"><text>Atmospheric Effects</text>
+ <Action name="new_skysphere"/>
+ <Action name="new_rainbow"/>
+ <Action name="new_fog"/>
+ </Menu>
+ <Separator/>
+ <Menu name="transformation_objects"><text>Transformations</text>
+ <Action name="new_scale"/>
+ <Action name="new_rotate"/>
+ <Action name="new_translate"/>
+ <Action name="new_povraymatrix"/>
+ </Menu>
+ </Menu>
+ <Menu name="view"><text>&amp;View</text>
+ <Action name="view_render_settings"/>
+ <Action name="view_render"/>
+ <Action name="view_render_window"/>
+ <Separator/>
+ <Action name="global_detail_level"/>
+ </Menu>
+</MenuBar>
+
+<Menu name="viewPopup">
+ <Action name="view_redisplay"/>
+ <Separator/>
+ <Action name="view_pos_x"/>
+ <Action name="view_neg_x"/>
+ <Action name="view_pos_y"/>
+ <Action name="view_neg_y"/>
+ <Action name="view_pos_z"/>
+ <Action name="view_neg_z"/>
+ <Action name="view_cameras_menu"/>
+ <Separator/>
+ <Action name="view_translate"/>
+ <Action name="view_scale"/>
+ <Separator/>
+ <Action name="cp_snaptogrid"/>
+ <ActionList name="cp_commands"/>
+ <Separator/>
+ <Action name="view_control_points_menu"/>
+</Menu>
+
+<Menu name="treeViewPopup">
+ <Action name="edit_cut"/>
+ <Action name="edit_copy"/>
+ <Action name="edit_paste"/>
+ <Action name="edit_delete"/>
+</Menu>
+
+<ToolBar name="mainToolBar"><text>Main Toolbar</text>
+ <Action name="edit_undo"/>
+ <Action name="edit_redo"/>
+ <Separator/>
+ <Action name="edit_cut"/>
+ <Action name="edit_copy"/>
+ <Action name="edit_paste"/>
+ <Action name="edit_delete"/>
+</ToolBar>
+
+<ToolBar name="newSolidObjectsBar"><text>Finite Solid Primitives</text>
+ <Action name="new_box"/>
+ <Action name="new_sphere"/>
+ <Action name="new_cylinder"/>
+ <Action name="new_cone"/>
+ <Action name="new_torus"/>
+ <Action name="new_superquadricellipsoid"/>
+ <Action name="new_heightfield"/>
+ <Action name="new_text"/>
+ <Action name="new_juliafractal"/>
+ <Action name="new_isosurface"/>
+ <Separator/>
+ <Action name="new_blob"/>
+ <Action name="new_blobsphere"/>
+ <Action name="new_blobcylinder"/>
+ <Separator/>
+ <Action name="new_lathe"/>
+ <Action name="new_prism"/>
+ <Action name="new_surfaceofrevolution"/>
+ <Action name="new_spheresweep"/>
+ <Separator/>
+ <Action name="new_objectlink"/>
+</ToolBar>
+
+<ToolBar name="newCSGObjectsBar"><text>Constructive Solid Geometry</text>
+ <Action name="new_union"/>
+ <Action name="new_intersection"/>
+ <Action name="new_difference"/>
+ <Action name="new_merge"/>
+</ToolBar>
+
+<ToolBar name="newInfiniteAndPatchObjectsBar"><text>Infinite and Patch Primitives</text>
+ <Action name="new_plane"/>
+ <Action name="new_polynom"/>
+ <Separator/>
+ <Action name="new_disc"/>
+ <Action name="new_bicubicpatch"/>
+ <Action name="new_triangle"/>
+ <Action name="new_mesh"/>
+</ToolBar>
+
+<ToolBar name="newAtmosphericEffectsBar"><text>Atmospheric Effects</text>
+ <Action name="new_skysphere"/>
+ <Action name="new_rainbow"/>
+ <Action name="new_fog"/>
+</ToolBar>
+
+<ToolBar name="newMiscObjectsBar"><text>Misc Objects</text>
+ <Action name="new_declare"/>
+ <Separator/>
+ <Action name="new_clippedby"/>
+ <Action name="new_boundedby"/>
+ <Separator/>
+ <Action name="new_light"/>
+ <Action name="new_lightgroup"/>
+ <Action name="new_lookslike"/>
+ <Action name="new_projectedthrough"/>
+ <Separator/>
+ <Action name="new_camera"/>
+ <Separator/>
+ <Action name="new_globalsettings"/>
+ <Action name="new_radiosity"/>
+ <Action name="new_globalphotons"/>
+ <Separator/>
+ <Action name="new_comment"/>
+ <Action name="new_raw"/>
+</ToolBar>
+
+<ToolBar name="newTransformationsBar"><text>Transformations</text>
+ <Action name="new_scale"/>
+ <Action name="new_rotate"/>
+ <Action name="new_translate"/>
+ <Action name="new_povraymatrix"/>
+</ToolBar>
+
+<ToolBar name="newTexturesBar"><text>Textures</text>
+ <Action name="new_material"/>
+ <Separator/>
+ <Action name="new_interior"/>
+ <Action name="new_media"/>
+ <Action name="new_density"/>
+ <Action name="new_densitylist"/>
+ <Action name="new_densitymap"/>
+ <Separator/>
+ <Action name="new_pattern"/>
+ <Action name="new_blendmapmodifiers"/>
+ <Action name="new_warp"/>
+ <Separator/>
+ <Action name="new_texture"/>
+ <Action name="new_interiortexture"/>
+ <Action name="new_texturelist"/>
+ <Action name="new_texturemap"/>
+ <Action name="new_materialmap"/>
+ <Action name="new_pigment"/>
+ <Action name="new_pigmentlist"/>
+ <Action name="new_pigmentmap"/>
+ <Action name="new_imagemap"/>
+ <Action name="new_solidcolor"/>
+ <Action name="new_colorlist"/>
+ <Action name="new_colormap"/>
+ <Action name="new_normal"/>
+ <Action name="new_normallist"/>
+ <Action name="new_normalmap"/>
+ <Action name="new_bumpmap"/>
+ <Action name="new_slope"/>
+ <Action name="new_slopemap"/>
+ <Action name="new_finish"/>
+ <Separator/>
+ <Action name="new_quickcolor"/>
+ <Separator/>
+ <Action name="new_photons"/>
+</ToolBar>
+
+<ToolBar name="renderBar"><text>Povray Rendering</text>
+ <Action name="view_render_combo"/>
+ <Action name="view_render_settings"/>
+ <Action name="view_render"/>
+</ToolBar>
+
+<ToolBar name="graphicalViewsBar"><text>Graphical View</text>
+ <Action name="view_visibility_label"/>
+ <Action name="view_visibility_level"/>
+ <Separator/>
+ <Action name="global_detail_label"/>
+ <Action name="global_detail_level"/>
+</ToolBar>
+
+</kpartgui>
diff --git a/kpovmodeler/main.cpp b/kpovmodeler/main.cpp
new file mode 100644
index 00000000..8bdabf8e
--- /dev/null
+++ b/kpovmodeler/main.cpp
@@ -0,0 +1,69 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include <klocale.h>
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <kapplication.h>
+
+#include "pmshell.h"
+#include "pmfactory.h"
+#include "pmrendermanager.h"
+#include "version.h"
+
+
+static KCmdLineOptions options[] =
+{
+ { "+[file]", I18N_NOOP( "File to open" ), 0 },
+ { "no-opengl", I18N_NOOP( "Disables OpenGL rendering" ), 0 },
+ { "no-dri", I18N_NOOP( "Disables direct rendering" ), 0 },
+ KCmdLineLastOption
+};
+
+int main( int argc, char* argv[] )
+{
+ PMShell* shell = 0;
+
+ KCmdLineArgs::init( argc, argv, PMFactory::aboutData( ) );
+ KCmdLineArgs::addCmdLineOptions( options );
+
+ KApplication app;
+
+ KCmdLineArgs* args = KCmdLineArgs::parsedArgs( );
+
+ if( !args->isSet( "-opengl" ) )
+ PMRenderManager::disableOpenGL( );
+ if( !args->isSet( "-dri" ) )
+ PMGLView::enableDirectRendering( false );
+
+ if( args->count( ) > 0 )
+ {
+ for( int i = 0 ; i < args->count( ) ; i++ )
+ {
+ shell = new PMShell( args->url( i ) );
+ shell->show( );
+ }
+ }
+ else
+ {
+ shell = new PMShell;
+ shell->show( );
+ }
+ args->clear();
+ return app.exec( );
+}
diff --git a/kpovmodeler/pics/Makefile.am b/kpovmodeler/pics/Makefile.am
new file mode 100644
index 00000000..ff33151e
--- /dev/null
+++ b/kpovmodeler/pics/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = locolor crystalsvg
diff --git a/kpovmodeler/pics/crystalsvg/Makefile.am b/kpovmodeler/pics/crystalsvg/Makefile.am
new file mode 100644
index 00000000..66481ab6
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/Makefile.am
@@ -0,0 +1,2 @@
+pmtoolbardir = $(kde_datadir)/kpovmodeler/icons
+pmtoolbar_ICON = AUTO
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmaddpoint.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmaddpoint.png
new file mode 100644
index 00000000..b3c7cab4
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmaddpoint.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmaddpointabove.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmaddpointabove.png
new file mode 100644
index 00000000..4310c761
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmaddpointabove.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmaddsubprism.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmaddsubprism.png
new file mode 100644
index 00000000..ff5bca2b
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmaddsubprism.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmbicubicpatch.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmbicubicpatch.png
new file mode 100644
index 00000000..3b7baaa0
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmbicubicpatch.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmblendmapmodifiers.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmblendmapmodifiers.png
new file mode 100644
index 00000000..334867dc
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmblendmapmodifiers.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmblob.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmblob.png
new file mode 100644
index 00000000..28c7f9c4
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmblob.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmblobcylinder.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmblobcylinder.png
new file mode 100644
index 00000000..3b788ebf
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmblobcylinder.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmblobsphere.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmblobsphere.png
new file mode 100644
index 00000000..9e9e9c04
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmblobsphere.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmboundedby.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmboundedby.png
new file mode 100644
index 00000000..288769d8
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmboundedby.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmbox.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmbox.png
new file mode 100644
index 00000000..48a81471
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmbox.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmbumpmap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmbumpmap.png
new file mode 100644
index 00000000..5221c2a9
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmbumpmap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmcamera.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmcamera.png
new file mode 100644
index 00000000..264a4e9f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmcamera.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmclippedby.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmclippedby.png
new file mode 100644
index 00000000..b281ac84
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmclippedby.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmcolorlist.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmcolorlist.png
new file mode 100644
index 00000000..cc3e406d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmcolorlist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmcolormap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmcolormap.png
new file mode 100644
index 00000000..ed68e5e5
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmcolormap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmcolormapdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmcolormapdeclare.png
new file mode 100644
index 00000000..3371c27a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmcolormapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmcomment.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmcomment.png
new file mode 100644
index 00000000..78b0a3f0
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmcomment.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmcone.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmcone.png
new file mode 100644
index 00000000..0dd88efd
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmcone.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmcylinder.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmcylinder.png
new file mode 100644
index 00000000..753453b2
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmcylinder.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdeclare.png
new file mode 100644
index 00000000..36c277d5
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdensity.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensity.png
new file mode 100644
index 00000000..98b91daa
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensity.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitydeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitydeclare.png
new file mode 100644
index 00000000..87f96d9e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitydeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitylist.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitylist.png
new file mode 100644
index 00000000..a783751e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitylist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitymap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitymap.png
new file mode 100644
index 00000000..dc277d2c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitymap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitymapdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitymapdeclare.png
new file mode 100644
index 00000000..f22f525e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdensitymapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdialogview.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdialogview.png
new file mode 100644
index 00000000..e48cb253
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdialogview.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdifference.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdifference.png
new file mode 100644
index 00000000..d2551828
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdifference.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdisc.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdisc.png
new file mode 100644
index 00000000..c39115c4
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdisc.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmdrag.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmdrag.png
new file mode 100644
index 00000000..65aba8ba
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmdrag.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmfinish.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmfinish.png
new file mode 100644
index 00000000..d014f144
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmfinish.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmfinishdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmfinishdeclare.png
new file mode 100644
index 00000000..b0e77f59
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmfinishdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmfog.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmfog.png
new file mode 100644
index 00000000..5d7acae0
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmfog.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmfogdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmfogdeclare.png
new file mode 100644
index 00000000..0db954dc
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmfogdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmglobalphotons.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmglobalphotons.png
new file mode 100644
index 00000000..1e6d4144
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmglobalphotons.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmglobalsettings.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmglobalsettings.png
new file mode 100644
index 00000000..9732e0ba
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmglobalsettings.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmglview.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmglview.png
new file mode 100644
index 00000000..7b69cea1
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmglview.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmheightfield.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmheightfield.png
new file mode 100644
index 00000000..f40f3f50
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmheightfield.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmimagemap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmimagemap.png
new file mode 100644
index 00000000..01d8d9da
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmimagemap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pminserterrors.png b/kpovmodeler/pics/crystalsvg/cr16-action-pminserterrors.png
new file mode 100644
index 00000000..a8edc396
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pminserterrors.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pminsertfirstchild.png b/kpovmodeler/pics/crystalsvg/cr16-action-pminsertfirstchild.png
new file mode 100644
index 00000000..5ee47f17
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pminsertfirstchild.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pminsertlastchild.png b/kpovmodeler/pics/crystalsvg/cr16-action-pminsertlastchild.png
new file mode 100644
index 00000000..cc7193f7
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pminsertlastchild.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pminsertsibling.png b/kpovmodeler/pics/crystalsvg/cr16-action-pminsertsibling.png
new file mode 100644
index 00000000..a0bca16f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pminsertsibling.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pminterior.png b/kpovmodeler/pics/crystalsvg/cr16-action-pminterior.png
new file mode 100644
index 00000000..76a003df
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pminterior.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pminteriordeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pminteriordeclare.png
new file mode 100644
index 00000000..18781544
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pminteriordeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pminteriortexture.png b/kpovmodeler/pics/crystalsvg/cr16-action-pminteriortexture.png
new file mode 100644
index 00000000..0de1c19b
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pminteriortexture.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pminteriortexturedeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pminteriortexturedeclare.png
new file mode 100644
index 00000000..801ecda9
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pminteriortexturedeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmintersection.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmintersection.png
new file mode 100644
index 00000000..954eae50
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmintersection.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmisosurface.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmisosurface.png
new file mode 100644
index 00000000..59dbdc05
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmisosurface.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmjuliafractal.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmjuliafractal.png
new file mode 100644
index 00000000..66b6cad0
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmjuliafractal.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmlathe.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmlathe.png
new file mode 100644
index 00000000..bd316870
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmlathe.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmlight.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmlight.png
new file mode 100644
index 00000000..e6e0d098
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmlight.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmlightgroup.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmlightgroup.png
new file mode 100644
index 00000000..105ca083
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmlightgroup.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmlistpattern.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmlistpattern.png
new file mode 100644
index 00000000..cd68aa2a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmlistpattern.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmlookslike.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmlookslike.png
new file mode 100644
index 00000000..3b511673
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmlookslike.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterial.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterial.png
new file mode 100644
index 00000000..af492025
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterial.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterialdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterialdeclare.png
new file mode 100644
index 00000000..aa9ba10b
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterialdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterialmap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterialmap.png
new file mode 100644
index 00000000..f46a9fb2
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmmaterialmap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmmatrix.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmmatrix.png
new file mode 100644
index 00000000..32f4f298
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmmatrix.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmmedia.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmmedia.png
new file mode 100644
index 00000000..4b72046c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmmedia.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmmediadeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmmediadeclare.png
new file mode 100644
index 00000000..e43b3948
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmmediadeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmmerge.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmmerge.png
new file mode 100644
index 00000000..04e71ed2
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmmerge.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmmesh.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmmesh.png
new file mode 100644
index 00000000..3ab5de1a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmmesh.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmnormal.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormal.png
new file mode 100644
index 00000000..99979725
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormal.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmnormaldeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormaldeclare.png
new file mode 100644
index 00000000..e148abc3
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormaldeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmnormallist.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormallist.png
new file mode 100644
index 00000000..4f4fea88
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormallist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmnormalmap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormalmap.png
new file mode 100644
index 00000000..6d12407b
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormalmap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmnormalmapdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormalmapdeclare.png
new file mode 100644
index 00000000..09c6d28e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmnormalmapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmobjectdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmobjectdeclare.png
new file mode 100644
index 00000000..cd562250
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmobjectdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmobjectlink.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmobjectlink.png
new file mode 100644
index 00000000..479664f6
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmobjectlink.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmpattern.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmpattern.png
new file mode 100644
index 00000000..5032bb8d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmpattern.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmphotons.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmphotons.png
new file mode 100644
index 00000000..b2f64977
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmphotons.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmpigment.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigment.png
new file mode 100644
index 00000000..e1c49853
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigment.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentdeclare.png
new file mode 100644
index 00000000..15af344d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentlist.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentlist.png
new file mode 100644
index 00000000..26aa2908
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentlist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentmap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentmap.png
new file mode 100644
index 00000000..32e1c4e6
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentmap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentmapdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentmapdeclare.png
new file mode 100644
index 00000000..2ff2d59d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmpigmentmapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmplane.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmplane.png
new file mode 100644
index 00000000..8e6590b0
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmplane.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmpolynom.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmpolynom.png
new file mode 100644
index 00000000..fcaf1a15
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmpolynom.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmprism.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmprism.png
new file mode 100644
index 00000000..b58f5aa8
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmprism.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmprojectedthrough.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmprojectedthrough.png
new file mode 100644
index 00000000..94b4aa4e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmprojectedthrough.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmquickcolor.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmquickcolor.png
new file mode 100644
index 00000000..41afd2a3
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmquickcolor.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmradiosity.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmradiosity.png
new file mode 100644
index 00000000..0428f202
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmradiosity.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmrainbow.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmrainbow.png
new file mode 100644
index 00000000..271405db
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmrainbow.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmrainbowdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmrainbowdeclare.png
new file mode 100644
index 00000000..9232255c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmrainbowdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmraw.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmraw.png
new file mode 100644
index 00000000..cb0ce235
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmraw.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmremovepoint.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmremovepoint.png
new file mode 100644
index 00000000..0be182fb
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmremovepoint.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmrender.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmrender.png
new file mode 100644
index 00000000..901a283d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmrender.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmrenderpreview.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmrenderpreview.png
new file mode 100644
index 00000000..c14b2c38
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmrenderpreview.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmrendersettings.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmrendersettings.png
new file mode 100644
index 00000000..9a63e1a2
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmrendersettings.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmrotate.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmrotate.png
new file mode 100644
index 00000000..744f927c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmrotate.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmscale.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmscale.png
new file mode 100644
index 00000000..ca553a0f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmscale.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmscene.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmscene.png
new file mode 100644
index 00000000..8a4c4bd1
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmscene.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmskysphere.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmskysphere.png
new file mode 100644
index 00000000..bbfd050a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmskysphere.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmskyspheredeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmskyspheredeclare.png
new file mode 100644
index 00000000..16cd5bb3
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmskyspheredeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmslope.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmslope.png
new file mode 100644
index 00000000..e665a1bd
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmslope.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmslopemap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmslopemap.png
new file mode 100644
index 00000000..a757fc90
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmslopemap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmslopemapdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmslopemapdeclare.png
new file mode 100644
index 00000000..fe7e9969
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmslopemapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmsolidcolor.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmsolidcolor.png
new file mode 100644
index 00000000..b2f4eda7
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmsolidcolor.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmsor.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmsor.png
new file mode 100644
index 00000000..8a652ed7
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmsor.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmsphere.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmsphere.png
new file mode 100644
index 00000000..a8a38679
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmsphere.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmspheresweep.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmspheresweep.png
new file mode 100644
index 00000000..19cced4c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmspheresweep.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmsqe.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmsqe.png
new file mode 100644
index 00000000..ea2e2a14
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmsqe.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtext.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtext.png
new file mode 100644
index 00000000..4b339926
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtext.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtexture.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexture.png
new file mode 100644
index 00000000..c90031ca
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexture.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturedeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturedeclare.png
new file mode 100644
index 00000000..75a77847
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturedeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturelist.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturelist.png
new file mode 100644
index 00000000..85881a7d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturelist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturemap.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturemap.png
new file mode 100644
index 00000000..171bf68d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturemap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturemapdeclare.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturemapdeclare.png
new file mode 100644
index 00000000..ab2edae6
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtexturemapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtorus.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtorus.png
new file mode 100644
index 00000000..82f78511
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtorus.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtranslate.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtranslate.png
new file mode 100644
index 00000000..2d16dea2
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtranslate.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtreeview.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtreeview.png
new file mode 100644
index 00000000..b78f646d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtreeview.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmtriangle.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmtriangle.png
new file mode 100644
index 00000000..9592e253
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmtriangle.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmunion.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmunion.png
new file mode 100644
index 00000000..1407fe3a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmunion.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr16-action-pmwarp.png b/kpovmodeler/pics/crystalsvg/cr16-action-pmwarp.png
new file mode 100644
index 00000000..c0f294cd
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr16-action-pmwarp.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmbicubicpatch.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmbicubicpatch.png
new file mode 100644
index 00000000..4dedf979
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmbicubicpatch.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmblendmapmodifiers.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmblendmapmodifiers.png
new file mode 100644
index 00000000..15fc5700
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmblendmapmodifiers.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmblob.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmblob.png
new file mode 100644
index 00000000..a165af80
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmblob.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmblobcylinder.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmblobcylinder.png
new file mode 100644
index 00000000..5dc230f9
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmblobcylinder.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmblobsphere.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmblobsphere.png
new file mode 100644
index 00000000..a43cf351
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmblobsphere.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmboundedby.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmboundedby.png
new file mode 100644
index 00000000..a8748990
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmboundedby.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmbox.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmbox.png
new file mode 100644
index 00000000..1bbdac7c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmbox.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmbumpmap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmbumpmap.png
new file mode 100644
index 00000000..2371d104
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmbumpmap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmcamera.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmcamera.png
new file mode 100644
index 00000000..51e3079a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmcamera.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmclippedby.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmclippedby.png
new file mode 100644
index 00000000..e7653cb1
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmclippedby.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmcolorlist.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmcolorlist.png
new file mode 100644
index 00000000..b94946d3
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmcolorlist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmcolormap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmcolormap.png
new file mode 100644
index 00000000..775db294
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmcolormap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmcolormapdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmcolormapdeclare.png
new file mode 100644
index 00000000..d4033601
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmcolormapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmcomment.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmcomment.png
new file mode 100644
index 00000000..348ed6fa
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmcomment.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmcone.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmcone.png
new file mode 100644
index 00000000..8cb55a7a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmcone.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigurecolors.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigurecolors.png
new file mode 100644
index 00000000..5775bb49
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigurecolors.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguredialogview.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguredialogview.png
new file mode 100644
index 00000000..5951a63b
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguredialogview.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguregraphicalview.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguregraphicalview.png
new file mode 100644
index 00000000..87ce6705
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguregraphicalview.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguregrid.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguregrid.png
new file mode 100644
index 00000000..f378b405
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguregrid.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureobjectlibrary.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureobjectlibrary.png
new file mode 100644
index 00000000..83a72f37
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureobjectlibrary.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureobjects.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureobjects.png
new file mode 100644
index 00000000..16fc0bdf
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureobjects.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureopengl.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureopengl.png
new file mode 100644
index 00000000..03c1efca
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureopengl.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigurepovray.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigurepovray.png
new file mode 100644
index 00000000..de26c9ca
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigurepovray.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguretexturepreview.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguretexturepreview.png
new file mode 100644
index 00000000..6cd4ee02
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfiguretexturepreview.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureviewlayout.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureviewlayout.png
new file mode 100644
index 00000000..502eb876
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmconfigureviewlayout.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmcylinder.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmcylinder.png
new file mode 100644
index 00000000..7fe73163
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmcylinder.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdeclare.png
new file mode 100644
index 00000000..840d56eb
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdensity.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensity.png
new file mode 100644
index 00000000..057210fb
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensity.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitydeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitydeclare.png
new file mode 100644
index 00000000..c38fe00c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitydeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitylist.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitylist.png
new file mode 100644
index 00000000..3c260d9e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitylist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitymap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitymap.png
new file mode 100644
index 00000000..3aabb850
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitymap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitymapdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitymapdeclare.png
new file mode 100644
index 00000000..2fc8e38b
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdensitymapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdifference.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdifference.png
new file mode 100644
index 00000000..0ac4238e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdifference.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdisc.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdisc.png
new file mode 100644
index 00000000..536cc8a0
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdisc.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmdrag.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmdrag.png
new file mode 100644
index 00000000..5a5c703d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmdrag.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmfinish.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmfinish.png
new file mode 100644
index 00000000..070f16d1
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmfinish.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmfinishdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmfinishdeclare.png
new file mode 100644
index 00000000..8d8359c5
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmfinishdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmfog.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmfog.png
new file mode 100644
index 00000000..23a5e5ee
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmfog.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmfogdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmfogdeclare.png
new file mode 100644
index 00000000..df4460d1
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmfogdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmglobalphotons.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmglobalphotons.png
new file mode 100644
index 00000000..b97c1337
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmglobalphotons.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmglobalsettings.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmglobalsettings.png
new file mode 100644
index 00000000..c87764bc
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmglobalsettings.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmheightfield.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmheightfield.png
new file mode 100644
index 00000000..64b767b4
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmheightfield.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmimagemap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmimagemap.png
new file mode 100644
index 00000000..a93604e5
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmimagemap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pminserterrors.png b/kpovmodeler/pics/crystalsvg/cr22-action-pminserterrors.png
new file mode 100644
index 00000000..fab5a4eb
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pminserterrors.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pminterior.png b/kpovmodeler/pics/crystalsvg/cr22-action-pminterior.png
new file mode 100644
index 00000000..d3c3a66f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pminterior.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pminteriordeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pminteriordeclare.png
new file mode 100644
index 00000000..20c5880e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pminteriordeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pminteriortexture.png b/kpovmodeler/pics/crystalsvg/cr22-action-pminteriortexture.png
new file mode 100644
index 00000000..bf6b6d00
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pminteriortexture.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pminteriortexturedeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pminteriortexturedeclare.png
new file mode 100644
index 00000000..2566437f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pminteriortexturedeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmintersection.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmintersection.png
new file mode 100644
index 00000000..edc287ff
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmintersection.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmisosurface.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmisosurface.png
new file mode 100644
index 00000000..cbbad58f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmisosurface.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmjuliafractal.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmjuliafractal.png
new file mode 100644
index 00000000..ce90ba06
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmjuliafractal.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmlathe.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmlathe.png
new file mode 100644
index 00000000..572ca904
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmlathe.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmlight.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmlight.png
new file mode 100644
index 00000000..ebb36242
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmlight.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmlightgroup.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmlightgroup.png
new file mode 100644
index 00000000..49e1aee6
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmlightgroup.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmlistpattern.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmlistpattern.png
new file mode 100644
index 00000000..76fa8d8b
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmlistpattern.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmlookslike.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmlookslike.png
new file mode 100644
index 00000000..d70ce958
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmlookslike.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterial.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterial.png
new file mode 100644
index 00000000..9cb8498d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterial.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterialdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterialdeclare.png
new file mode 100644
index 00000000..317b793b
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterialdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterialmap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterialmap.png
new file mode 100644
index 00000000..d352f4c1
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmmaterialmap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmmatrix.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmmatrix.png
new file mode 100644
index 00000000..3b9524e5
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmmatrix.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmmedia.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmmedia.png
new file mode 100644
index 00000000..dcb93a22
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmmedia.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmmediadeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmmediadeclare.png
new file mode 100644
index 00000000..e09b71c9
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmmediadeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmmerge.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmmerge.png
new file mode 100644
index 00000000..ce93f989
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmmerge.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmmesh.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmmesh.png
new file mode 100644
index 00000000..74ffa376
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmmesh.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmnormal.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormal.png
new file mode 100644
index 00000000..c2838b98
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormal.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmnormaldeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormaldeclare.png
new file mode 100644
index 00000000..ce3841d8
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormaldeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmnormallist.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormallist.png
new file mode 100644
index 00000000..ec5d3695
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormallist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmnormalmap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormalmap.png
new file mode 100644
index 00000000..435b0b74
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormalmap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmnormalmapdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormalmapdeclare.png
new file mode 100644
index 00000000..2cabff95
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmnormalmapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmobjectdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmobjectdeclare.png
new file mode 100644
index 00000000..b1d2947f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmobjectdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmobjectlink.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmobjectlink.png
new file mode 100644
index 00000000..f6e2a32f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmobjectlink.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmpattern.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmpattern.png
new file mode 100644
index 00000000..f2620041
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmpattern.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmphotons.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmphotons.png
new file mode 100644
index 00000000..4e2f161e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmphotons.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmpigment.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigment.png
new file mode 100644
index 00000000..6a2103d0
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigment.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentdeclare.png
new file mode 100644
index 00000000..5b0e22e7
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentlist.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentlist.png
new file mode 100644
index 00000000..568beead
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentlist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentmap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentmap.png
new file mode 100644
index 00000000..36466942
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentmap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentmapdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentmapdeclare.png
new file mode 100644
index 00000000..8bbee2e9
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmpigmentmapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmplane.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmplane.png
new file mode 100644
index 00000000..f5430a72
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmplane.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmpolynom.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmpolynom.png
new file mode 100644
index 00000000..67e4b46c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmpolynom.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmprism.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmprism.png
new file mode 100644
index 00000000..ca3dd0b5
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmprism.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmprojectedthrough.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmprojectedthrough.png
new file mode 100644
index 00000000..4f7712e6
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmprojectedthrough.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmquickcolor.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmquickcolor.png
new file mode 100644
index 00000000..4a2c7c25
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmquickcolor.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmradiosity.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmradiosity.png
new file mode 100644
index 00000000..59f923cf
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmradiosity.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmrainbow.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmrainbow.png
new file mode 100644
index 00000000..3e0b1021
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmrainbow.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmrainbowdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmrainbowdeclare.png
new file mode 100644
index 00000000..f92ab03e
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmrainbowdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmraw.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmraw.png
new file mode 100644
index 00000000..d8270f7c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmraw.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmrender.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmrender.png
new file mode 100644
index 00000000..6aa2b69f
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmrender.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmrenderpreview.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmrenderpreview.png
new file mode 100644
index 00000000..0227ab0c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmrenderpreview.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmrendersettings.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmrendersettings.png
new file mode 100644
index 00000000..cb6b2e9a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmrendersettings.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmrotate.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmrotate.png
new file mode 100644
index 00000000..22a5af44
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmrotate.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmscale.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmscale.png
new file mode 100644
index 00000000..e7820f60
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmscale.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmscene.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmscene.png
new file mode 100644
index 00000000..47c9dc56
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmscene.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmskysphere.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmskysphere.png
new file mode 100644
index 00000000..cad5cdf5
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmskysphere.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmskyspheredeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmskyspheredeclare.png
new file mode 100644
index 00000000..4aaafa28
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmskyspheredeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmslope.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmslope.png
new file mode 100644
index 00000000..42abb1b4
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmslope.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmslopemap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmslopemap.png
new file mode 100644
index 00000000..4efbb6ef
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmslopemap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmslopemapdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmslopemapdeclare.png
new file mode 100644
index 00000000..19307196
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmslopemapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmsolidcolor.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmsolidcolor.png
new file mode 100644
index 00000000..e8cbfc51
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmsolidcolor.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmsor.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmsor.png
new file mode 100644
index 00000000..1a9bdf7a
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmsor.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmsphere.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmsphere.png
new file mode 100644
index 00000000..bb9b6f2d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmsphere.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmspheresweep.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmspheresweep.png
new file mode 100644
index 00000000..fe94fb83
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmspheresweep.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmsqe.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmsqe.png
new file mode 100644
index 00000000..a3d9152d
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmsqe.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtext.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtext.png
new file mode 100644
index 00000000..25fc94c3
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtext.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtexture.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexture.png
new file mode 100644
index 00000000..a2f13e15
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexture.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturedeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturedeclare.png
new file mode 100644
index 00000000..e40843f0
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturedeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturelist.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturelist.png
new file mode 100644
index 00000000..e497f164
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturelist.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturemap.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturemap.png
new file mode 100644
index 00000000..282acdf6
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturemap.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturemapdeclare.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturemapdeclare.png
new file mode 100644
index 00000000..2f046f10
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtexturemapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtorus.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtorus.png
new file mode 100644
index 00000000..ab187e64
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtorus.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtranslate.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtranslate.png
new file mode 100644
index 00000000..3234c8fe
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtranslate.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmtriangle.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmtriangle.png
new file mode 100644
index 00000000..4cae6980
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmtriangle.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmunion.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmunion.png
new file mode 100644
index 00000000..aacb8776
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmunion.png
Binary files differ
diff --git a/kpovmodeler/pics/crystalsvg/cr22-action-pmwarp.png b/kpovmodeler/pics/crystalsvg/cr22-action-pmwarp.png
new file mode 100644
index 00000000..e98e139c
--- /dev/null
+++ b/kpovmodeler/pics/crystalsvg/cr22-action-pmwarp.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/Makefile.am b/kpovmodeler/pics/locolor/Makefile.am
new file mode 100644
index 00000000..66481ab6
--- /dev/null
+++ b/kpovmodeler/pics/locolor/Makefile.am
@@ -0,0 +1,2 @@
+pmtoolbardir = $(kde_datadir)/kpovmodeler/icons
+pmtoolbar_ICON = AUTO
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmaddpoint.png b/kpovmodeler/pics/locolor/lo16-action-pmaddpoint.png
new file mode 100644
index 00000000..b3c7cab4
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmaddpoint.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmaddpointabove.png b/kpovmodeler/pics/locolor/lo16-action-pmaddpointabove.png
new file mode 100644
index 00000000..4310c761
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmaddpointabove.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmaddsubprism.png b/kpovmodeler/pics/locolor/lo16-action-pmaddsubprism.png
new file mode 100644
index 00000000..c292daab
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmaddsubprism.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmbicubicpatch.png b/kpovmodeler/pics/locolor/lo16-action-pmbicubicpatch.png
new file mode 100644
index 00000000..dd3752c9
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmbicubicpatch.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmblendmapmodifiers.png b/kpovmodeler/pics/locolor/lo16-action-pmblendmapmodifiers.png
new file mode 100644
index 00000000..c95808c9
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmblendmapmodifiers.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmblob.png b/kpovmodeler/pics/locolor/lo16-action-pmblob.png
new file mode 100644
index 00000000..f5dfe034
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmblob.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmblobcylinder.png b/kpovmodeler/pics/locolor/lo16-action-pmblobcylinder.png
new file mode 100644
index 00000000..a320ec3a
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmblobcylinder.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmblobsphere.png b/kpovmodeler/pics/locolor/lo16-action-pmblobsphere.png
new file mode 100644
index 00000000..f45f5433
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmblobsphere.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmboundedby.png b/kpovmodeler/pics/locolor/lo16-action-pmboundedby.png
new file mode 100644
index 00000000..4d167b4d
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmboundedby.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmbox.png b/kpovmodeler/pics/locolor/lo16-action-pmbox.png
new file mode 100644
index 00000000..6e8665d4
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmbox.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmbumpmap.png b/kpovmodeler/pics/locolor/lo16-action-pmbumpmap.png
new file mode 100644
index 00000000..17df5809
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmbumpmap.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmcamera.png b/kpovmodeler/pics/locolor/lo16-action-pmcamera.png
new file mode 100644
index 00000000..264a4e9f
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmcamera.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmclippedby.png b/kpovmodeler/pics/locolor/lo16-action-pmclippedby.png
new file mode 100644
index 00000000..98394ece
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmclippedby.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmcomment.png b/kpovmodeler/pics/locolor/lo16-action-pmcomment.png
new file mode 100644
index 00000000..78b0a3f0
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmcomment.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmcone.png b/kpovmodeler/pics/locolor/lo16-action-pmcone.png
new file mode 100644
index 00000000..dc369725
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmcone.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmcylinder.png b/kpovmodeler/pics/locolor/lo16-action-pmcylinder.png
new file mode 100644
index 00000000..7147b4ca
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmcylinder.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmdeclare.png
new file mode 100644
index 00000000..e56be4e9
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdensity.png b/kpovmodeler/pics/locolor/lo16-action-pmdensity.png
new file mode 100644
index 00000000..58fe3d6f
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdensity.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdensitydeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmdensitydeclare.png
new file mode 100644
index 00000000..9b826d4a
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdensitydeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdensitylist.png b/kpovmodeler/pics/locolor/lo16-action-pmdensitylist.png
new file mode 100644
index 00000000..d4d9170b
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdensitylist.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdensitymap.png b/kpovmodeler/pics/locolor/lo16-action-pmdensitymap.png
new file mode 100644
index 00000000..69f9fda7
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdensitymap.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdensitymapdeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmdensitymapdeclare.png
new file mode 100644
index 00000000..0b26c273
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdensitymapdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdifference.png b/kpovmodeler/pics/locolor/lo16-action-pmdifference.png
new file mode 100644
index 00000000..d2551828
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdifference.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdisc.png b/kpovmodeler/pics/locolor/lo16-action-pmdisc.png
new file mode 100644
index 00000000..095adf32
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdisc.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmdrag.png b/kpovmodeler/pics/locolor/lo16-action-pmdrag.png
new file mode 100644
index 00000000..65aba8ba
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmdrag.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmfog.png b/kpovmodeler/pics/locolor/lo16-action-pmfog.png
new file mode 100644
index 00000000..89346120
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmfog.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmfogdeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmfogdeclare.png
new file mode 100644
index 00000000..944720cb
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmfogdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmglobalsettings.png b/kpovmodeler/pics/locolor/lo16-action-pmglobalsettings.png
new file mode 100644
index 00000000..b8951994
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmglobalsettings.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmheightfield.png b/kpovmodeler/pics/locolor/lo16-action-pmheightfield.png
new file mode 100644
index 00000000..5f4b7871
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmheightfield.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmimagemap.png b/kpovmodeler/pics/locolor/lo16-action-pmimagemap.png
new file mode 100644
index 00000000..2ece117d
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmimagemap.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pminserterrors.png b/kpovmodeler/pics/locolor/lo16-action-pminserterrors.png
new file mode 100644
index 00000000..a8edc396
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pminserterrors.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pminsertfirstchild.png b/kpovmodeler/pics/locolor/lo16-action-pminsertfirstchild.png
new file mode 100644
index 00000000..5ee47f17
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pminsertfirstchild.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pminsertlastchild.png b/kpovmodeler/pics/locolor/lo16-action-pminsertlastchild.png
new file mode 100644
index 00000000..cc7193f7
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pminsertlastchild.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pminsertsibling.png b/kpovmodeler/pics/locolor/lo16-action-pminsertsibling.png
new file mode 100644
index 00000000..a0bca16f
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pminsertsibling.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmintersection.png b/kpovmodeler/pics/locolor/lo16-action-pmintersection.png
new file mode 100644
index 00000000..954eae50
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmintersection.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmjuliafractal.png b/kpovmodeler/pics/locolor/lo16-action-pmjuliafractal.png
new file mode 100644
index 00000000..4b88db07
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmjuliafractal.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmlathe.png b/kpovmodeler/pics/locolor/lo16-action-pmlathe.png
new file mode 100644
index 00000000..181e4446
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmlathe.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmlight.png b/kpovmodeler/pics/locolor/lo16-action-pmlight.png
new file mode 100644
index 00000000..ec9c456d
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmlight.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmlistpattern.png b/kpovmodeler/pics/locolor/lo16-action-pmlistpattern.png
new file mode 100644
index 00000000..6a85bc72
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmlistpattern.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmlookslike.png b/kpovmodeler/pics/locolor/lo16-action-pmlookslike.png
new file mode 100644
index 00000000..6f7a439f
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmlookslike.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmmaterialmap.png b/kpovmodeler/pics/locolor/lo16-action-pmmaterialmap.png
new file mode 100644
index 00000000..c964f8a4
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmmaterialmap.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmmatrix.png b/kpovmodeler/pics/locolor/lo16-action-pmmatrix.png
new file mode 100644
index 00000000..096bad00
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmmatrix.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmmerge.png b/kpovmodeler/pics/locolor/lo16-action-pmmerge.png
new file mode 100644
index 00000000..04e71ed2
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmmerge.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmobjectdeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmobjectdeclare.png
new file mode 100644
index 00000000..cd562250
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmobjectdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmobjectlink.png b/kpovmodeler/pics/locolor/lo16-action-pmobjectlink.png
new file mode 100644
index 00000000..479664f6
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmobjectlink.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmpigment.png b/kpovmodeler/pics/locolor/lo16-action-pmpigment.png
new file mode 100644
index 00000000..0f59413c
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmpigment.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmpigmentdeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmpigmentdeclare.png
new file mode 100644
index 00000000..efdada03
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmpigmentdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmplane.png b/kpovmodeler/pics/locolor/lo16-action-pmplane.png
new file mode 100644
index 00000000..7b2029d9
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmplane.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmpolynom.png b/kpovmodeler/pics/locolor/lo16-action-pmpolynom.png
new file mode 100644
index 00000000..d2858866
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmpolynom.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmprism.png b/kpovmodeler/pics/locolor/lo16-action-pmprism.png
new file mode 100644
index 00000000..ce96f3e5
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmprism.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmquickcolor.png b/kpovmodeler/pics/locolor/lo16-action-pmquickcolor.png
new file mode 100644
index 00000000..109131d8
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmquickcolor.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmrainbow.png b/kpovmodeler/pics/locolor/lo16-action-pmrainbow.png
new file mode 100644
index 00000000..ddd11480
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmrainbow.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmrainbowdeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmrainbowdeclare.png
new file mode 100644
index 00000000..47906a3a
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmrainbowdeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmraw.png b/kpovmodeler/pics/locolor/lo16-action-pmraw.png
new file mode 100644
index 00000000..cb0ce235
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmraw.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmremovepoint.png b/kpovmodeler/pics/locolor/lo16-action-pmremovepoint.png
new file mode 100644
index 00000000..0be182fb
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmremovepoint.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmrender.png b/kpovmodeler/pics/locolor/lo16-action-pmrender.png
new file mode 100644
index 00000000..a2fc7d79
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmrender.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmrenderpreview.png b/kpovmodeler/pics/locolor/lo16-action-pmrenderpreview.png
new file mode 100644
index 00000000..feb2f7b1
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmrenderpreview.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmrendersettings.png b/kpovmodeler/pics/locolor/lo16-action-pmrendersettings.png
new file mode 100644
index 00000000..f19b0eea
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmrendersettings.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmrotate.png b/kpovmodeler/pics/locolor/lo16-action-pmrotate.png
new file mode 100644
index 00000000..744f927c
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmrotate.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmscale.png b/kpovmodeler/pics/locolor/lo16-action-pmscale.png
new file mode 100644
index 00000000..ca553a0f
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmscale.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmscene.png b/kpovmodeler/pics/locolor/lo16-action-pmscene.png
new file mode 100644
index 00000000..61dfa78a
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmscene.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmskysphere.png b/kpovmodeler/pics/locolor/lo16-action-pmskysphere.png
new file mode 100644
index 00000000..aaf0f47a
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmskysphere.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmskyspheredeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmskyspheredeclare.png
new file mode 100644
index 00000000..b9d719ff
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmskyspheredeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmsolidcolor.png b/kpovmodeler/pics/locolor/lo16-action-pmsolidcolor.png
new file mode 100644
index 00000000..38840359
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmsolidcolor.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmsor.png b/kpovmodeler/pics/locolor/lo16-action-pmsor.png
new file mode 100644
index 00000000..c38eb6ae
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmsor.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmsphere.png b/kpovmodeler/pics/locolor/lo16-action-pmsphere.png
new file mode 100644
index 00000000..a7ea2461
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmsphere.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmsqr.png b/kpovmodeler/pics/locolor/lo16-action-pmsqr.png
new file mode 100644
index 00000000..cfaa5aff
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmsqr.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmtext.png b/kpovmodeler/pics/locolor/lo16-action-pmtext.png
new file mode 100644
index 00000000..04987349
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmtext.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmtexture.png b/kpovmodeler/pics/locolor/lo16-action-pmtexture.png
new file mode 100644
index 00000000..d84fcd66
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmtexture.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmtexturedeclare.png b/kpovmodeler/pics/locolor/lo16-action-pmtexturedeclare.png
new file mode 100644
index 00000000..8984df92
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmtexturedeclare.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmtorus.png b/kpovmodeler/pics/locolor/lo16-action-pmtorus.png
new file mode 100644
index 00000000..a09660ab
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmtorus.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmtranslate.png b/kpovmodeler/pics/locolor/lo16-action-pmtranslate.png
new file mode 100644
index 00000000..2d16dea2
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmtranslate.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmtriangle.png b/kpovmodeler/pics/locolor/lo16-action-pmtriangle.png
new file mode 100644
index 00000000..dfe6ed44
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmtriangle.png
Binary files differ
diff --git a/kpovmodeler/pics/locolor/lo16-action-pmunion.png b/kpovmodeler/pics/locolor/lo16-action-pmunion.png
new file mode 100644
index 00000000..1407fe3a
--- /dev/null
+++ b/kpovmodeler/pics/locolor/lo16-action-pmunion.png
Binary files differ
diff --git a/kpovmodeler/pm2dcontrolpoint.cpp b/kpovmodeler/pm2dcontrolpoint.cpp
new file mode 100644
index 00000000..66e7a85a
--- /dev/null
+++ b/kpovmodeler/pm2dcontrolpoint.cpp
@@ -0,0 +1,207 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#include "pm2dcontrolpoint.h"
+#include "pmmath.h"
+#include <math.h>
+
+PM2DControlPoint::PM2DControlPoint( const PMVector& point,
+ PM2DControlPoint::CPType type, int id,
+ const QString& description )
+ : PMControlPoint( id, description )
+{
+ m_point = point;
+ m_type = type;
+ m_thirdCoordinate = 0;
+ m_scale = 1.0;
+ m_pBasePoint = 0;
+ m_pLatheLink = 0;
+}
+
+void PM2DControlPoint::graphicalChangeStarted( )
+{
+ QPtrListIterator<PM2DControlPoint> it( m_linkedPoints );
+ for( ; *it; ++it )
+ if( !( *it )->selected( ) )
+ ( *it )->graphicalChangeStarted( );
+
+ m_original2DPoint = m_point;
+ m_originalPoint = to3D( m_point );
+}
+
+void PM2DControlPoint::graphicalChange( const PMVector& startPoint,
+ const PMVector& /*viewNormal*/,
+ const PMVector& endPoint )
+{
+ if( m_pBasePoint && m_pBasePoint->selected( ) )
+ return;
+
+ m_point = to2D( m_originalPoint + endPoint - startPoint );
+
+ if( m_pLatheLink && m_pLatheLink->selected( ) )
+ {
+ PM2DControlPoint* ll = m_pLatheLink;
+ PMVector op = ll->to2D( ll->m_originalPoint + endPoint - startPoint );
+
+ m_point = to2D( m_originalPoint + endPoint - startPoint );
+ if( ( m_point - m_original2DPoint ).abs( ) <
+ ( op - ll->m_original2DPoint ).abs( ) )
+ m_point = op;
+ }
+
+ QPtrListIterator<PM2DControlPoint> it( m_linkedPoints );
+ for( ; *it; ++it )
+ {
+ ( *it )->m_point = m_point + ( *it )->m_original2DPoint
+ - m_original2DPoint;
+ ( *it )->setChanged( );
+ }
+}
+
+void PM2DControlPoint::setBasePoint( PM2DControlPoint* p )
+{
+ if( p != m_pBasePoint )
+ {
+ if( m_pBasePoint )
+ m_pBasePoint->removeLinkedPoint( this );
+ m_pBasePoint = p;
+ if( m_pBasePoint )
+ m_pBasePoint->addLinkedPoint( this );
+ }
+}
+
+void PM2DControlPoint::snapToGrid( )
+{
+ int i;
+ double d = moveGrid( );
+ bool diff = false;
+ PMVector change( 2 );
+
+ if( m_pBasePoint && m_pBasePoint->selected( ) )
+ {
+ m_point -= m_pBasePoint->m_point;
+ diff = true;
+ }
+
+ if( !approxZero( d ) )
+ {
+ for( i = 0; i < 2; i++ )
+ {
+ change[i] = -m_point[i];
+ m_point[i] = rint( m_point[i] / d ) * d;
+ change[i] += m_point[i];
+ }
+ }
+
+ if( diff )
+ m_point += m_pBasePoint->m_point;
+
+ QPtrListIterator<PM2DControlPoint> it( m_linkedPoints );
+ for( ; *it; ++it )
+ {
+ ( *it )->m_point += change;
+ ( *it )->setChanged( );
+ }
+
+ setChanged( );
+}
+
+PMVector PM2DControlPoint::to2D( const PMVector& v ) const
+{
+ PMVector result( 2 );
+ switch( m_type )
+ {
+ case PM2DXY:
+ result[0] = v[0];
+ result[1] = v[1];
+ break;
+ case PM2DXZ:
+ result[0] = v[0];
+ result[1] = v[2];
+ break;
+ case PM2DYZ:
+ result[0] = v[1];
+ result[1] = v[2];
+ break;
+ case PM2DYX:
+ result[0] = v[1];
+ result[1] = v[0];
+ break;
+ case PM2DZX:
+ result[0] = v[2];
+ result[1] = v[0];
+ break;
+ case PM2DZY:
+ result[0] = v[2];
+ result[1] = v[1];
+ break;
+ }
+ if( !approxZero( m_scale ) )
+ result /= m_scale;
+ return result;
+}
+
+PMVector PM2DControlPoint::to3D( const PMVector& v ) const
+{
+ PMVector vec( v * m_scale );
+ PMVector result( 3 );
+ switch( m_type )
+ {
+ case PM2DXY:
+ result[0] = vec[0];
+ result[1] = vec[1];
+ result[2] = m_thirdCoordinate;
+ break;
+ case PM2DXZ:
+ result[0] = vec[0];
+ result[1] = m_thirdCoordinate;
+ result[2] = vec[1];
+ break;
+ case PM2DYZ:
+ result[0] = m_thirdCoordinate;
+ result[1] = vec[0];
+ result[2] = vec[1];
+ break;
+ case PM2DYX:
+ result[1] = vec[0];
+ result[0] = vec[1];
+ result[2] = m_thirdCoordinate;
+ break;
+ case PM2DZX:
+ result[2] = vec[0];
+ result[0] = vec[1];
+ result[1] = m_thirdCoordinate;
+ break;
+ case PM2DZY:
+ result[2] = vec[0];
+ result[1] = vec[1];
+ result[0] = m_thirdCoordinate;
+ break;
+ }
+ return result;
+}
+
+void PM2DControlPoint::addLinkedPoint( PM2DControlPoint* p )
+{
+ if( !m_linkedPoints.containsRef( p ) )
+ m_linkedPoints.append( p );
+}
+
+void PM2DControlPoint::removeLinkedPoint( PM2DControlPoint* p )
+{
+ m_linkedPoints.removeRef( p );
+}
diff --git a/kpovmodeler/pm2dcontrolpoint.h b/kpovmodeler/pm2dcontrolpoint.h
new file mode 100644
index 00000000..f949570b
--- /dev/null
+++ b/kpovmodeler/pm2dcontrolpoint.h
@@ -0,0 +1,135 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#ifndef PM2DCONTROLPOINT_H
+#define PM2DCONTROLPOINT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "pmcontrolpoint.h"
+#include <qptrlist.h>
+
+/**
+ * Class for free moveable control points
+ */
+class PM2DControlPoint : public PMControlPoint
+{
+public:
+ /**
+ * Type enum
+ */
+ enum CPType { PM2DXY, PM2DYX, PM2DXZ, PM2DZX, PM2DYZ, PM2DZY };
+ /**
+ * Creates a PM2DControlPoint with id. Point has to be a 2D vector.
+ */
+ PM2DControlPoint( const PMVector& point, CPType type,
+ int id, const QString& description );
+ /**
+ * Deletes the PM2DControlPoint
+ */
+ virtual ~PM2DControlPoint( ) { };
+
+ /** */
+ virtual PMVector position( ) const { return to3D( m_point ); }
+ /**
+ * Sets the 2d coordinates of the control point
+ */
+ void setPoint( const PMVector& newPoint ) { m_point = newPoint; }
+ /**
+ * 2d coordinates of the control point
+ */
+ PMVector point( ) const { return m_point; }
+ /** */
+ virtual void snapToGrid( );
+ /**
+ * Returns the third coordinate
+ */
+ double thirdCoordinate( ) const { return m_thirdCoordinate; }
+ /**
+ * Sets the third coordinate
+ */
+ void setThirdCoordinate( double d ) { m_thirdCoordinate = d; }
+ /**
+ * Returns the 2d scale
+ */
+ double scale( ) const { return m_scale; }
+ /**
+ * Sets the scale
+ */
+ void setScale( double s ) { m_scale = s; }
+
+ /**
+ * Sets the base point.
+ *
+ * If a base point is set, an extra line is shown between
+ * the base point and this control point.
+ */
+ void setBasePoint( PM2DControlPoint* p );
+ /**
+ * Returns the base point
+ */
+ PM2DControlPoint* basePoint( ) const { return m_pBasePoint; }
+ /**
+ * This method is used by the lathe object to link
+ * the control points in the xy and xz plane. These points are
+ * synchronized if both are selected.
+ */
+ void setLatheLink( PM2DControlPoint* p ) { m_pLatheLink = p; }
+ /**
+ * Returns the linked control point for lathe points
+ */
+ PM2DControlPoint* latheLink( ) const { return m_pLatheLink; }
+
+ /** */
+ virtual bool hasExtraLine( ) const { return m_pBasePoint; }
+ /** */
+ virtual PMVector extraLineStart( ) const { return position( ); }
+ /** */
+ virtual PMVector extraLineEnd( ) const
+ {
+ if( m_pBasePoint )
+ return m_pBasePoint->position( );
+ return PMVector( 0, 0, 0 );
+ }
+
+protected:
+ /** */
+ virtual void graphicalChangeStarted( );
+ /** */
+ virtual void graphicalChange( const PMVector& startPoint,
+ const PMVector& viewNormal,
+ const PMVector& endPoint );
+private:
+ PMVector to2D( const PMVector& v ) const;
+ PMVector to3D( const PMVector& v ) const;
+ void addLinkedPoint( PM2DControlPoint* p );
+ void removeLinkedPoint( PM2DControlPoint* p );
+
+ PMVector m_point, m_originalPoint, m_original2DPoint;
+ CPType m_type;
+ double m_thirdCoordinate;
+ double m_scale;
+ PM2DControlPoint* m_pBasePoint;
+ QPtrList<PM2DControlPoint> m_linkedPoints;
+ PM2DControlPoint* m_pLatheLink;
+};
+
+#endif
diff --git a/kpovmodeler/pm3dcontrolpoint.cpp b/kpovmodeler/pm3dcontrolpoint.cpp
new file mode 100644
index 00000000..7bd4e10e
--- /dev/null
+++ b/kpovmodeler/pm3dcontrolpoint.cpp
@@ -0,0 +1,49 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#include "pm3dcontrolpoint.h"
+#include "pmmath.h"
+#include <math.h>
+
+PM3DControlPoint::PM3DControlPoint( const PMVector& point, int id,
+ const QString& description )
+ : PMControlPoint( id, description )
+{
+ m_point = point;
+}
+
+void PM3DControlPoint::graphicalChangeStarted( )
+{
+ m_originalPoint = m_point;
+}
+
+void PM3DControlPoint::graphicalChange( const PMVector& startPoint,
+ const PMVector& /*viewNormal*/,
+ const PMVector& endPoint )
+{
+ m_point = m_originalPoint + endPoint - startPoint;
+}
+
+void PM3DControlPoint::snapToGrid( )
+{
+ int i;
+ double d = moveGrid( );
+ if( !approxZero( d ) )
+ for( i = 0; i < 3; i++ )
+ m_point[i] = rint( m_point[i] / d ) * d;
+ setChanged( );
+}
diff --git a/kpovmodeler/pm3dcontrolpoint.h b/kpovmodeler/pm3dcontrolpoint.h
new file mode 100644
index 00000000..765c4e43
--- /dev/null
+++ b/kpovmodeler/pm3dcontrolpoint.h
@@ -0,0 +1,68 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#ifndef PM3DCONTROLPOINT_H
+#define PM3DCONTROLPOINT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "pmcontrolpoint.h"
+
+/**
+ * Class for free moveable control points
+ */
+class PM3DControlPoint : public PMControlPoint
+{
+public:
+ /**
+ * Creates a PM3DControlPoint with id.
+ */
+ PM3DControlPoint( const PMVector& point, int id, const QString& description );
+ /**
+ * Deletes the PM3DControlPoint
+ */
+ virtual ~PM3DControlPoint( ) { };
+
+ /** */
+ virtual PMVector position( ) const { return m_point; }
+ /**
+ * Sets the 3d coordinates of the control point
+ */
+ void setPoint( const PMVector& newPoint ) { m_point = newPoint; }
+ /**
+ * 3d coordinates of the control point
+ */
+ PMVector point( ) const { return m_point; }
+ /** */
+ virtual void snapToGrid( );
+
+protected:
+ /** */
+ virtual void graphicalChangeStarted( );
+ /** */
+ virtual void graphicalChange( const PMVector& startPoint,
+ const PMVector& viewNormal,
+ const PMVector& endPoint );
+private:
+ PMVector m_point, m_originalPoint;
+};
+
+#endif
diff --git a/kpovmodeler/pmactions.cpp b/kpovmodeler/pmactions.cpp
new file mode 100644
index 00000000..b84e42da
--- /dev/null
+++ b/kpovmodeler/pmactions.cpp
@@ -0,0 +1,254 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#include "pmactions.h"
+
+#include <qcombobox.h>
+#include <qwhatsthis.h>
+#include <qspinbox.h>
+#include <qlabel.h>
+#include <qstyle.h>
+#include <qpainter.h>
+#include <ktoolbar.h>
+#include <ktoolbarbutton.h>
+
+#include "pmdebug.h"
+
+// Fixed widths are calculated wrong in a toolbar.
+// Fixed sizeHint for the combo box to return
+// at least the minimum size
+class PMComboBox : public QComboBox
+{
+public:
+ PMComboBox( QWidget* parent, const char* name = 0 )
+ : QComboBox( parent, name )
+ {
+ }
+
+ virtual QSize minimumSizeHint( ) const
+ {
+ QSize s = QComboBox::minimumSizeHint( );
+ return s.expandedTo( minimumSize( ) );
+ }
+ virtual QSize sizeHint( ) const
+ {
+ QSize s = QComboBox::sizeHint( );
+ return s.expandedTo( minimumSize( ) );
+ }
+};
+
+PMComboAction::PMComboAction( const QString& text, int accel, const QObject* receiver, const char* member,
+ QObject* parent, const char* name )
+ : KAction( text, accel, parent, name )
+{
+ m_receiver = receiver;
+ m_member = member;
+ m_minWidth = 0;
+ m_maxWidth = 0;
+}
+
+PMComboAction::~PMComboAction( )
+{
+}
+
+int PMComboAction::plug( QWidget* w, int index )
+{
+ if( !w->inherits( "KToolBar" ) )
+ return -1;
+
+ KToolBar* toolBar = ( KToolBar* ) w;
+
+ int id = KAction::getToolButtonID( );
+
+ QComboBox* comboBox = new PMComboBox( toolBar );
+ if( m_minWidth > 0 )
+ comboBox->setMinimumWidth( m_minWidth );
+ if( m_maxWidth > 0 )
+ comboBox->setMaximumWidth( m_maxWidth );
+
+ toolBar->insertWidget( id, m_minWidth > 0 ? m_minWidth : 300,
+ comboBox, index );
+ connect( comboBox, SIGNAL( activated( int ) ), m_receiver, m_member );
+
+ addContainer( toolBar, id );
+
+ connect( toolBar, SIGNAL( destroyed( ) ), this, SLOT( slotDestroyed( ) ) );
+
+ //toolBar->setItemAutoSized( id, true );
+
+ m_combo = comboBox;
+
+ emit plugged( );
+
+ QWhatsThis::add( comboBox, whatsThis( ) );
+
+ return containerCount( ) - 1;
+}
+
+void PMComboAction::unplug( QWidget *w )
+{
+ if( !w->inherits( "KToolBar" ) )
+ return;
+
+ KToolBar *toolBar = ( KToolBar* ) w;
+
+ int idx = findContainer( w );
+
+ toolBar->removeItem( itemId( idx ) );
+
+ removeContainer( idx );
+ m_combo = 0L;
+}
+
+
+// Use a toolbutton instead of a label so it is styled correctly.
+// copied from konq_actions.cc
+class PMToolBarLabel : public QToolButton
+{
+public:
+ PMToolBarLabel( const QString& text, QWidget* parent = 0, const char* name = 0 )
+ : QToolButton( parent, name )
+ {
+ setText( text );
+ }
+protected:
+ QSize sizeHint( ) const
+ {
+ int w = fontMetrics( ).width( text( ) );
+ int h = fontMetrics( ).height( );
+ return QSize( w, h );
+ }
+ void drawButton( QPainter* p )
+ {
+#if ( QT_VERSION >= 300 )
+ // Draw the background
+ style( ).drawComplexControl( QStyle::CC_ToolButton, p, this, rect( ), colorGroup( ),
+ QStyle::Style_Enabled, QStyle::SC_ToolButton );
+ // Draw the label
+ style( ).drawControl( QStyle::CE_ToolButtonLabel, p, this, rect( ), colorGroup( ),
+ QStyle::Style_Enabled );
+#else
+ p->drawText( rect( ), Qt::AlignVCenter | Qt::AlignLeft, text( ) );
+#endif
+ }
+};
+
+PMLabelAction::PMLabelAction( const QString &text, QObject *parent, const char *name )
+ : KAction( text, 0, parent, name )
+{
+ m_button = 0;
+}
+
+int PMLabelAction::plug( QWidget *widget, int index )
+{
+ //do not call the previous implementation here
+
+ if( widget->inherits( "KToolBar" ) )
+ {
+ KToolBar* tb = ( KToolBar* ) widget;
+
+ int id = KAction::getToolButtonID( );
+
+ m_button = new PMToolBarLabel( text( ), widget );
+ tb->insertWidget( id, m_button->width( ), m_button, index );
+
+ addContainer( tb, id );
+
+ connect( tb, SIGNAL( destroyed( ) ), this, SLOT( slotDestroyed( ) ) );
+
+ return containerCount( ) - 1;
+ }
+
+ return -1;
+}
+
+void PMLabelAction::unplug( QWidget *widget )
+{
+ if( widget->inherits( "KToolBar" ) )
+ {
+ KToolBar* bar = ( KToolBar* ) widget;
+
+ int idx = findContainer( bar );
+
+ if( idx != -1 )
+ {
+ bar->removeItem( itemId( idx ) );
+ removeContainer( idx );
+ }
+
+ m_button = 0;
+ return;
+ }
+}
+
+
+PMSpinBoxAction::PMSpinBoxAction( const QString& text, int accel, const QObject* receiver, const char* member,
+ QObject* parent, const char* name )
+ : KAction( text, accel, parent, name )
+{
+ m_receiver = receiver;
+ m_member = member;
+}
+
+PMSpinBoxAction::~PMSpinBoxAction( )
+{
+}
+
+int PMSpinBoxAction::plug( QWidget* w, int index )
+{
+ if( !w->inherits( "KToolBar" ) )
+ return -1;
+
+ KToolBar* toolBar = ( KToolBar* ) w;
+
+ int id = KAction::getToolButtonID( );
+
+ QSpinBox* spinBox = new QSpinBox( -1000, 1000, 1, w );
+ toolBar->insertWidget( id, 70, spinBox, index );
+
+ connect( spinBox, SIGNAL( valueChanged( int ) ), m_receiver, m_member );
+
+ addContainer( toolBar, id );
+
+ connect( toolBar, SIGNAL( destroyed( ) ), this, SLOT( slotDestroyed( ) ) );
+ //toolBar->setItemAutoSized( id, false );
+
+ m_spinBox = spinBox;
+
+ emit plugged( );
+
+ QWhatsThis::add( spinBox, whatsThis( ) );
+
+ return containerCount( ) - 1;
+}
+
+void PMSpinBoxAction::unplug( QWidget *w )
+{
+ if( !w->inherits( "KToolBar" ) )
+ return;
+
+ KToolBar *toolBar = (KToolBar *)w;
+
+ int idx = findContainer( w );
+
+ toolBar->removeItem( itemId( idx ) );
+
+ removeContainer( idx );
+ m_spinBox = 0L;
+}
+
+#include "pmactions.moc"
diff --git a/kpovmodeler/pmactions.h b/kpovmodeler/pmactions.h
new file mode 100644
index 00000000..f4f8e9e4
--- /dev/null
+++ b/kpovmodeler/pmactions.h
@@ -0,0 +1,106 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMACTIONS_H
+#define PMACTIONS_H
+
+#include <qguardedptr.h>
+#include <kaction.h>
+
+class QComboBox;
+class QSpinBox;
+class QLabel;
+class QToolButton;
+
+/**
+ * Combobox action for the toolbar.
+ *
+ * Copied from konq_actions.h, author: Simon Hausmann <hausmann@kde.org>
+ */
+class PMComboAction : public KAction
+{
+ Q_OBJECT
+public:
+ PMComboAction( const QString& text, int accel, const QObject* receiver, const char* member, QObject* parent, const char* name );
+ ~PMComboAction( );
+
+ virtual int plug( QWidget* w, int index = -1 );
+
+ virtual void unplug( QWidget* w );
+
+ QGuardedPtr<QComboBox> combo( ) { return m_combo; }
+
+ void setMaximumWidth( int w ) { m_maxWidth = w; }
+ void setMinimumWidth( int w ) { m_minWidth = w; }
+
+signals:
+ void plugged( );
+
+private:
+ QGuardedPtr<QComboBox> m_combo;
+ const QObject* m_receiver;
+ const char* m_member;
+ int m_minWidth, m_maxWidth;
+};
+
+/**
+ * Label action for the toolbar.
+ *
+ * Copied from konq_actions.h, author: Simon Hausmann <hausmann@kde.org>
+ */
+class PMLabelAction : public KAction
+{
+ Q_OBJECT
+public:
+ PMLabelAction( const QString &text, QObject *parent = 0, const char *name = 0 );
+
+ virtual int plug( QWidget *widget, int index = -1 );
+ virtual void unplug( QWidget *widget );
+ QToolButton* button( ) { return m_button; }
+
+private:
+ QToolButton* m_button;
+};
+
+/**
+ * Spinbox action for the toolbar.
+ */
+class PMSpinBoxAction : public KAction
+{
+ Q_OBJECT
+public:
+ PMSpinBoxAction( const QString& text, int accel, const QObject* receiver, const char* member, QObject* parent, const char* name );
+ ~PMSpinBoxAction( );
+
+ virtual int plug( QWidget* w, int index = -1 );
+ virtual void unplug( QWidget* w );
+
+ QGuardedPtr<QSpinBox> spinBox( ) { return m_spinBox; }
+
+signals:
+ void plugged( );
+
+private:
+ QGuardedPtr<QSpinBox> m_spinBox;
+ const QObject* m_receiver;
+ const char* m_member;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmaddcommand.cpp b/kpovmodeler/pmaddcommand.cpp
new file mode 100644
index 00000000..b8d4ea49
--- /dev/null
+++ b/kpovmodeler/pmaddcommand.cpp
@@ -0,0 +1,233 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmaddcommand.h"
+#include "pmcommandmanager.h"
+#include "pmpart.h"
+#include "pmdeclare.h"
+#include "pmerrorflags.h"
+#include "pmrecursiveobjectiterator.h"
+#include "pmmemento.h"
+
+#include <klocale.h>
+
+PMAddCommand::PMAddCommand( PMObject* obj, PMObject* parent, PMObject* after )
+ : PMCommand( i18n( "Add New %1" ).arg( obj->description( ) ) )
+{
+ m_objects.append( obj );
+ m_pParent = parent;
+ m_pAfter = after;
+ m_executed = false;
+ m_firstExecution = true;
+ m_linksCreated = false;
+ m_pParentChangeMemento = 0;
+}
+
+PMAddCommand::PMAddCommand( const PMObjectList& list, PMObject* parent,
+ PMObject* after )
+ : PMCommand( i18n( "Add Objects" ) )
+{
+ m_objects = list;
+ m_pParent = parent;
+ m_pAfter = after;
+ m_executed = false;
+ m_firstExecution = true;
+ m_linksCreated = false;
+ m_pParentChangeMemento = 0;
+}
+
+PMAddCommand::~PMAddCommand( )
+{
+ if( !m_executed )
+ {
+ m_objects.setAutoDelete( true );
+ m_objects.clear( );
+ }
+
+ m_insertErrors.setAutoDelete( true );
+ m_insertErrors.clear( );
+}
+
+void PMAddCommand::execute( PMCommandManager* theManager )
+{
+ if( !m_executed )
+ {
+ PMObjectListIterator it( m_objects );
+ PMObject* prev = m_pAfter;
+ PMObjectList errors;
+ PMObject* current;
+ bool error = false;
+
+ if( m_firstExecution )
+ if( m_pParent->dataChangeOnInsertRemove( ) )
+ m_pParent->createMemento( );
+
+ for( ; it.current( ); ++it )
+ {
+ current = it.current( );
+ if( !prev )
+ {
+ if( m_pParent->canInsert( current, 0 ) )
+ {
+ m_pParent->insertChild( current, 0 );
+ prev = current;
+ theManager->cmdObjectChanged( current, PMCAdd );
+ }
+ else
+ error = true;
+ }
+ else
+ {
+ if( m_pParent->canInsert( current, prev ) )
+ {
+ m_pParent->insertChildAfter( current, prev );
+ prev = current;
+ theManager->cmdObjectChanged( current, PMCAdd );
+ }
+ else
+ error = true;
+ }
+
+ if( error )
+ {
+ errors.append( current );
+ theManager->cmdObjectChanged( current, PMCAdd | PMCInsertError );
+ if( current->isA( "Declare" ) )
+ {
+ // the object, that couldn't be inserted was a declare,
+ // remove all links
+ PMObjectListIterator links =
+ ( ( PMDeclare* ) current )->linkedObjects( );
+ for( ; links.current( ); ++links )
+ {
+ PMObject* l = links.current( );
+ if( l->parent( ) )
+ l->parent( )->takeChild( l );
+ else
+ m_objects.removeRef( l );
+ m_insertErrors.append( l );
+ }
+ }
+ if( current->linkedObject( ) )
+ current->linkedObject( )->removeLinkedObject( current );
+ error = false;
+ }
+ }
+
+ if( m_pParent->mementoCreated( ) )
+ m_pParentChangeMemento = m_pParent->takeMemento( );
+
+ if( m_pParentChangeMemento )
+ {
+ PMObjectChangeListIterator c = m_pParentChangeMemento->changedObjects( );
+ for( ; c.current( ); ++c )
+ theManager->cmdObjectChanged( c.current( )->object( ),
+ c.current( )->mode( ) );
+ }
+
+ if( m_linksCreated )
+ {
+ PMObjectListIterator rit( m_links );
+ for( ; rit.current( ); ++rit )
+ rit.current( )->linkedObject( )->addLinkedObject( rit.current( ) );
+ PMObjectListIterator dit( m_linkedDeclares );
+ for( ; dit.current( ); ++dit )
+ theManager->cmdObjectChanged( dit.current( ), PMCData );
+ }
+
+ PMObjectListIterator errorit( errors );
+ for( ; errorit.current( ); ++errorit )
+ {
+ m_objects.removeRef( errorit.current( ) );
+ m_insertErrors.append( errorit.current( ) );
+
+ PMRecursiveObjectIterator lit( errorit.current( ) );
+ for( ; lit.current( ); ++lit )
+ if( lit.current( )->linkedObject( ) )
+ lit.current( )->linkedObject( )->removeLinkedObject( lit.current( ) );
+ }
+
+ m_executed = true;
+ m_firstExecution = false;
+ }
+}
+
+void PMAddCommand::undo( PMCommandManager* theManager )
+{
+ if( m_executed )
+ {
+ PMObjectListIterator it( m_objects );
+ PMObject* obj;
+ PMDeclare* decl;
+
+ if( !m_linksCreated )
+ {
+ for( ; it.current( ); ++it )
+ {
+ PMRecursiveObjectIterator lit( it.current( ) );
+ for( ; lit.current( ); ++lit )
+ {
+ decl = lit.current( )->linkedObject( );
+ if( decl )
+ {
+ m_links.append( lit.current( ) );
+ if( !m_linkedDeclares.containsRef( decl ) )
+ m_linkedDeclares.append( decl );
+ }
+ }
+ }
+ m_linksCreated = true;
+ }
+
+ PMObjectListIterator rit( m_links );
+ for( ; rit.current( ); ++rit )
+ rit.current( )->linkedObject( )->removeLinkedObject( rit.current( ) );
+
+ for( it.toLast( ) ; it.current( ); --it )
+ {
+ obj = it.current( );
+ // signal has to be emitted before the item is removed
+ theManager->cmdObjectChanged( obj, PMCRemove );
+
+ if( obj->parent( ) )
+ obj->parent( )->takeChild( obj );
+ }
+
+ if( m_pParentChangeMemento )
+ {
+ m_pParent->restoreMemento( m_pParentChangeMemento );
+ PMObjectChangeListIterator c = m_pParentChangeMemento->changedObjects( );
+ for( ; c.current( ); ++c )
+ {
+ theManager->cmdObjectChanged( c.current( )->object( ),
+ c.current( )->mode( ) );
+ }
+ }
+
+ PMObjectListIterator dit( m_linkedDeclares );
+ for( ; dit.current( ); ++dit )
+ theManager->cmdObjectChanged( dit.current( ), PMCData );
+
+ m_executed = false;
+ }
+}
+
+int PMAddCommand::errorFlags( PMPart* )
+{
+ return PMENone;
+}
diff --git a/kpovmodeler/pmaddcommand.h b/kpovmodeler/pmaddcommand.h
new file mode 100644
index 00000000..97793d03
--- /dev/null
+++ b/kpovmodeler/pmaddcommand.h
@@ -0,0 +1,87 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMADDCOMMAND_H
+#define PMADDCOMMAND_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmcommand.h"
+#include "pmobject.h"
+
+class PMMemento;
+
+/**
+ * Command class for adding a new PMObject
+ */
+class PMAddCommand : public PMCommand
+{
+public:
+ /**
+ * Command that adds a new PMObject.
+ *
+ * The object obj will be inserted as child of parent after
+ * the object after.
+ *
+ * If after is 0, the object becomes the first child.
+ */
+ PMAddCommand( PMObject* obj, PMObject* parent, PMObject* after );
+
+ /**
+ * Command that adds a list of new PMObjects.
+ *
+ * The object in the list will be inserted as children of parent after
+ * the object after.
+ *
+ * If after is 0, the objects will be inserted as first children.
+ */
+ PMAddCommand( const PMObjectList& list, PMObject* parent, PMObject* after );
+ /**
+ * Deletes the command. The inserted object will be deleted, if
+ the command was not executed (or undo-ed) */
+ virtual ~PMAddCommand( );
+
+ /** */
+ virtual int errorFlags( PMPart* );
+
+protected:
+ /**
+ * Executes the command and stores undo information
+ */
+ virtual void execute( PMCommandManager* theManager );
+ /**
+ * Undo the command
+ */
+ virtual void undo( PMCommandManager* theManager );
+
+private:
+ PMObject* m_pParent;
+ PMObjectList m_objects;
+ PMObject* m_pAfter;
+ bool m_executed, m_firstExecution;
+ PMObjectList m_insertErrors;
+ PMObjectList m_links;
+ PMObjectList m_linkedDeclares;
+ bool m_linksCreated;
+ PMMemento* m_pParentChangeMemento;
+};
+
+#endif
diff --git a/kpovmodeler/pmallcommands.h b/kpovmodeler/pmallcommands.h
new file mode 100644
index 00000000..014b5a04
--- /dev/null
+++ b/kpovmodeler/pmallcommands.h
@@ -0,0 +1,27 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMALLCOMMANDS_H
+#define PMALLCOMMANDS_H
+
+#include "pmaddcommand.h"
+#include "pmdeletecommand.h"
+#include "pmmovecommand.h"
+
+#endif
diff --git a/kpovmodeler/pmalledits.h b/kpovmodeler/pmalledits.h
new file mode 100644
index 00000000..e1ee4a5a
--- /dev/null
+++ b/kpovmodeler/pmalledits.h
@@ -0,0 +1,25 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMALLEDITS_H
+#define PMALLEDITS_H
+
+#include "pmboxedit.h"
+
+#endif
diff --git a/kpovmodeler/pmallobjects.h b/kpovmodeler/pmallobjects.h
new file mode 100644
index 00000000..3a02107c
--- /dev/null
+++ b/kpovmodeler/pmallobjects.h
@@ -0,0 +1,106 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2003 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMALLOBJECTS_H
+#define PMALLOBJECTS_H
+
+#include "pmscene.h"
+#include "pmglobalsettings.h"
+
+#include "pmbox.h"
+#include "pmsphere.h"
+#include "pmcylinder.h"
+#include "pmcone.h"
+#include "pmtorus.h"
+#include "pmlathe.h"
+#include "pmprism.h"
+#include "pmsor.h"
+#include "pmsqe.h"
+#include "pmheightfield.h"
+#include "pmtext.h"
+#include "pmjuliafractal.h"
+
+#include "pmblob.h"
+#include "pmblobsphere.h"
+#include "pmblobcylinder.h"
+
+#include "pmplane.h"
+#include "pmpolynom.h"
+
+#include "pmdeclare.h"
+#include "pmobjectlink.h"
+
+#include "pmcsg.h"
+
+#include "pmdisc.h"
+#include "pmbicubicpatch.h"
+#include "pmtriangle.h"
+
+#include "pmboundedby.h"
+#include "pmclippedby.h"
+
+#include "pmcamera.h"
+
+#include "pmtranslate.h"
+#include "pmscale.h"
+#include "pmrotate.h"
+#include "pmpovraymatrix.h"
+
+#include "pmlight.h"
+#include "pmlookslike.h"
+#include "pmprojectedthrough.h"
+
+#include "pmtexture.h"
+#include "pmpigment.h"
+#include "pmsolidcolor.h"
+#include "pmlistpattern.h"
+#include "pmquickcolor.h"
+#include "pmnormal.h"
+#include "pmfinish.h"
+#include "pmpattern.h"
+#include "pmblendmapmodifiers.h"
+#include "pmimagemap.h"
+#include "pmbumpmap.h"
+#include "pmtexturemap.h"
+#include "pmmaterialmap.h"
+#include "pmwarp.h"
+#include "pmslope.h"
+#include "pmdensity.h"
+
+#include "pmskysphere.h"
+#include "pmrainbow.h"
+#include "pmfog.h"
+#include "pminterior.h"
+#include "pmmedia.h"
+#include "pmmaterial.h"
+
+#include "pmcomment.h"
+#include "pmraw.h"
+
+// POV-Ray 3.5 objects
+#include "pmisosurface.h"
+#include "pmradiosity.h"
+#include "pmglobalphotons.h"
+#include "pmphotons.h"
+#include "pmlightgroup.h"
+#include "pminteriortexture.h"
+#include "pmspheresweep.h"
+#include "pmmesh.h"
+
+#endif
diff --git a/kpovmodeler/pmbicubicpatch.cpp b/kpovmodeler/pmbicubicpatch.cpp
new file mode 100644
index 00000000..cbc633a9
--- /dev/null
+++ b/kpovmodeler/pmbicubicpatch.cpp
@@ -0,0 +1,544 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2001-2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmbicubicpatch.h"
+
+#include "pmxmlhelper.h"
+#include "pmbicubicpatchedit.h"
+#include "pmmemento.h"
+#include "pmviewstructure.h"
+#include "pm3dcontrolpoint.h"
+#include "pmmath.h"
+
+#include <klocale.h>
+
+const double c_defaultPatchSize = 6.0;
+const int c_defaultPatchType = 0;
+const int c_defaultPatchUSteps = 3;
+const int c_defaultPatchVSteps = 3;
+const double c_defaultPatchFlatness = 0;
+const PMVector c_defaultUVVector0 = PMVector( 0.0, 0.0 );
+const PMVector c_defaultUVVector1 = PMVector( 1.0, 0.0 );
+const PMVector c_defaultUVVector2 = PMVector( 1.0, 1.0 );
+const PMVector c_defaultUVVector3 = PMVector( 0.0, 1.0 );
+
+PMDefinePropertyClass( PMBicubicPatch, PMBicubicPatchProperty );
+
+class PMPointProperty : public PMPropertyBase
+{
+public:
+ PMPointProperty( )
+ : PMPropertyBase( "controlPoints", PMVariant::Vector )
+ {
+ m_index = 0;
+ }
+ virtual int dimensions( ) const { return 1; }
+ virtual void setIndex( int /*dimension*/, int index )
+ {
+ if( index < 0 || index > 15 )
+ kdError( PMArea ) << "Illegal index in PMBicubicPatch::PointProperty::setIndex" << endl;
+ else
+ m_index = index;
+ }
+ virtual int size( PMObject* /*object*/, int /*dimension*/ ) const
+ {
+ return 16;
+ }
+protected:
+ virtual bool setProtected( PMObject* obj, const PMVariant& v )
+ {
+ PMBicubicPatch* p = ( PMBicubicPatch* ) obj;
+ p->setControlPoint( m_index, v.vectorData( ) );
+ return true;
+ }
+ virtual PMVariant getProtected( const PMObject* obj )
+ {
+ const PMBicubicPatch* p = ( const PMBicubicPatch* ) obj;
+ return PMVariant( p->controlPoint( m_index ) );
+ }
+
+private:
+ int m_index;
+};
+
+class PMUVVectorProperty : public PMPropertyBase
+{
+public:
+ PMUVVectorProperty( )
+ : PMPropertyBase( "uvVectors", PMVariant::Vector )
+ {
+ m_index = 0;
+ }
+ virtual int dimensions( ) const { return 1; }
+ virtual void setIndex( int /*dimension*/, int index )
+ {
+ if( index < 0 || index > 3 )
+ kdError( PMArea ) << "Illegal index in PMBicubicPatch::UVVectorProperty::setIndex" << endl;
+ else
+ m_index = index;
+ }
+ virtual int size( PMObject* /*object*/, int /*dimension*/ ) const
+ {
+ return 3;
+ }
+protected:
+ virtual bool setProtected( PMObject* obj, const PMVariant& v )
+ {
+ PMBicubicPatch* p = ( PMBicubicPatch* ) obj;
+ p->setUVVector( m_index, v.vectorData( ) );
+ return true;
+ }
+ virtual PMVariant getProtected( const PMObject* obj )
+ {
+ const PMBicubicPatch* p = ( const PMBicubicPatch* ) obj;
+ return PMVariant( p->uvVector( m_index ) );
+ }
+
+private:
+ int m_index;
+};
+
+PMMetaObject* PMBicubicPatch::s_pMetaObject = 0;
+PMObject* createNewBicubicPatch( PMPart* part )
+{
+ return new PMBicubicPatch( part );
+}
+
+PMBicubicPatch::PMBicubicPatch( PMPart* part )
+ : Base( part )
+{
+ int x, z;
+ double o = -c_defaultPatchSize / 2.0, s = c_defaultPatchSize / 3.0;
+ m_patchType = c_defaultPatchType;
+ m_numUSteps = c_defaultPatchUSteps;
+ m_numVSteps = c_defaultPatchVSteps;
+ m_flatness = c_defaultPatchFlatness;
+ for( x = 0; x < 4; x++ )
+ for( z = 0; z < 4; z++ )
+ m_point[x+z*4] = PMVector( o + s * x, 0, o + s * z );
+ m_vsUSteps = 0;
+ m_vsVSteps = 0;
+ m_uvEnabled = false;
+ m_uvVectors[0] = c_defaultUVVector0;
+ m_uvVectors[1] = c_defaultUVVector1;
+ m_uvVectors[2] = c_defaultUVVector2;
+ m_uvVectors[3] = c_defaultUVVector3;
+}
+
+PMBicubicPatch::PMBicubicPatch( const PMBicubicPatch& p )
+ : Base( p )
+{
+ int i;
+ m_patchType = p.m_patchType;
+ m_numUSteps = p.m_numUSteps;
+ m_numVSteps = p.m_numVSteps;
+ m_flatness = p.m_flatness;
+ for( i = 0; i < 16; i++ )
+ m_point[i] = p.m_point[i];
+ m_vsUSteps = 0;
+ m_vsVSteps = 0;
+ m_uvEnabled = p.m_uvEnabled;
+ for( i = 0; i < 4; ++i )
+ m_uvVectors[i] = p.m_uvVectors[i];
+}
+
+PMBicubicPatch::~PMBicubicPatch( )
+{
+}
+
+QString PMBicubicPatch::description( ) const
+{
+ return i18n( "bicubic patch" );
+}
+
+void PMBicubicPatch::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ int i;
+
+ e.setAttribute( "type", m_patchType );
+ e.setAttribute( "flatness", m_flatness );
+ e.setAttribute( "uSteps", m_numUSteps );
+ e.setAttribute( "vSteps", m_numVSteps );
+ e.setAttribute( "uvEnabled", m_uvEnabled );
+
+ for( i = 0; i < 16; i++ )
+ e.setAttribute( QString( "cp%1" ).arg( i ), m_point[i].serializeXML( ) );
+
+ for( i = 0; i < 4; ++i )
+ e.setAttribute( QString( "uv%1" ).arg( i ), m_uvVectors[i].serializeXML( ) );
+
+ Base::serialize( e, doc );
+}
+
+void PMBicubicPatch::readAttributes( const PMXMLHelper& h )
+{
+ int u, v;
+ double o = -c_defaultPatchSize / 2.0, s = c_defaultPatchSize / 3.0;
+
+ m_patchType = h.intAttribute( "type", c_defaultPatchType );
+ m_flatness = h.doubleAttribute( "flatness", c_defaultPatchFlatness );
+ m_numUSteps = h.intAttribute( "uSteps", c_defaultPatchUSteps );
+ m_numVSteps = h.intAttribute( "vSteps", c_defaultPatchVSteps );
+ m_uvEnabled = h.boolAttribute( "uvEnabled", m_uvEnabled );
+
+ for( v = 0; v < 4; v++ )
+ for( u = 0; u < 4; u++ )
+ m_point[u+v*4] = h.vectorAttribute( QString( "cp%1" ).arg( u+v*4 ),
+ PMVector( o + s * u, 0, o + s * v ) );
+
+ m_uvVectors[0] = h.vectorAttribute( "uv0", c_defaultUVVector0 );
+ m_uvVectors[1] = h.vectorAttribute( "uv1", c_defaultUVVector1 );
+ m_uvVectors[2] = h.vectorAttribute( "uv2", c_defaultUVVector2 );
+ m_uvVectors[3] = h.vectorAttribute( "uv3", c_defaultUVVector3 );
+
+ Base::readAttributes( h );
+}
+
+PMMetaObject* PMBicubicPatch::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "BicubicPatch", Base::metaObject( ),
+ createNewBicubicPatch );
+ s_pMetaObject->addProperty(
+ new PMBicubicPatchProperty( "patchType", &PMBicubicPatch::setPatchType,
+ &PMBicubicPatch::patchType ) );
+ s_pMetaObject->addProperty(
+ new PMBicubicPatchProperty( "uSteps", &PMBicubicPatch::setUSteps,
+ &PMBicubicPatch::uSteps ) );
+ s_pMetaObject->addProperty(
+ new PMBicubicPatchProperty( "vSteps", &PMBicubicPatch::setVSteps,
+ &PMBicubicPatch::vSteps ) );
+ s_pMetaObject->addProperty(
+ new PMBicubicPatchProperty( "flatness", &PMBicubicPatch::setFlatness,
+ &PMBicubicPatch::flatness ) );
+ s_pMetaObject->addProperty(
+ new PMBicubicPatchProperty( "uvEnabled", &PMBicubicPatch::enableUV,
+ &PMBicubicPatch::isUVEnabled ) );
+ s_pMetaObject->addProperty( new PMPointProperty( ) );
+ s_pMetaObject->addProperty( new PMUVVectorProperty( ) );
+ }
+ return s_pMetaObject;
+}
+
+void PMBicubicPatch::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+void PMBicubicPatch::setPatchType( int patchType )
+{
+ if( ( patchType == 0 ) || ( patchType == 1 ) )
+ {
+ if( patchType != m_patchType )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMTypeID, m_patchType );
+ m_patchType = patchType;
+ }
+ }
+ else
+ kdError( PMArea ) << "Wrong type in PMBicubicPatch::setPatchType( )\n";
+}
+
+void PMBicubicPatch::setFlatness( double flatness )
+{
+ if( flatness >= 0.0 )
+ {
+ if( flatness != m_flatness )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMFlatnessID, m_flatness );
+ m_flatness = flatness;
+ }
+ }
+ else
+ kdError( PMArea ) << "Flatness has to be >= 0 in PMBicubicPatch::setFlatness( )\n";
+}
+
+void PMBicubicPatch::setUSteps( int steps )
+{
+ if( steps >= 0 )
+ {
+ if( steps != m_numUSteps )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMUStepsID, m_numUSteps );
+ m_numUSteps = steps;
+ setViewStructureChanged( );
+ }
+ }
+ else
+ kdError( PMArea ) << "uSteps has to be >= 0 in PMBicubicPatch::setUSteps( )\n";
+}
+
+void PMBicubicPatch::setVSteps( int steps )
+{
+ if( steps >= 0 )
+ {
+ if( steps != m_numVSteps )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMVStepsID, m_numVSteps );
+ m_numVSteps = steps;
+ setViewStructureChanged( );
+ }
+ }
+ else
+ kdError( PMArea ) << "vSteps has to be >= 0 in PMBicubicPatch::setVSteps( )\n";
+}
+
+void PMBicubicPatch::setControlPoint( int i, const PMVector& p )
+{
+ if( ( i >= 0 ) && ( i <= 15 ) )
+ {
+ if( p != m_point[i] )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMCP0ID + i, m_point[i] );
+ m_point[i] = p;
+ setViewStructureChanged( );
+ }
+ }
+ else
+ kdError( PMArea ) << "Wrong index in PMBicubicPatch::setControlPoint( )\n";
+}
+
+PMVector PMBicubicPatch::controlPoint( int i ) const
+{
+ if( ( i >= 0 ) && ( i <= 15 ) )
+ return m_point[i];
+ else
+ kdError( PMArea ) << "Wrong index in PMBicubicPatch::controlPoint( )\n";
+ return PMVector( 0, 0, 0 );
+}
+
+void PMBicubicPatch::enableUV( bool yes )
+{
+ if( yes != m_uvEnabled )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMUVEnabledID, m_uvEnabled );
+ m_uvEnabled = yes;
+ }
+}
+
+void PMBicubicPatch::setUVVector( int i, const PMVector& v )
+{
+ if ( i >= 0 && i < 4 )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMUV0ID + i, m_uvVectors[i] );
+ m_uvVectors[i] = v;
+ m_uvVectors[i].resize( 2 );
+ }
+ else
+ kdError( PMArea ) << "Wrong index in PMBicubicPatch::setUVVector\n";
+}
+
+PMVector PMBicubicPatch::uvVector( int i ) const
+{
+ if( i >= 0 && i < 4 )
+ return m_uvVectors[i];
+ else
+ kdError( PMArea ) << "Wrong index in PMBicubicPatch::uvVector\n";
+ return PMVector( 0.0, 0.0 );
+}
+
+PMDialogEditBase* PMBicubicPatch::editWidget( QWidget* parent ) const
+{
+ return new PMBicubicPatchEdit( parent );
+}
+
+void PMBicubicPatch::restoreMemento( PMMemento* s )
+{
+ PMMementoDataIterator it( s );
+ PMMementoData* data;
+
+ for( ; it.current( ); ++it )
+ {
+ data = it.current( );
+ if( data->objectType( ) == s_pMetaObject )
+ {
+ switch( data->valueID( ) )
+ {
+ case PMTypeID:
+ setPatchType( data->intData( ) );
+ break;
+ case PMFlatnessID:
+ setFlatness( data->doubleData( ) );
+ break;
+ case PMUStepsID:
+ setUSteps( data->intData( ) );
+ break;
+ case PMVStepsID:
+ setVSteps( data->intData( ) );
+ break;
+ case PMUVEnabledID:
+ enableUV( data->boolData( ) );
+ break;
+ default:
+ if( ( data->valueID( ) >= PMCP0ID ) && ( data->valueID( ) <= PMCP15ID ) )
+ setControlPoint( data->valueID( ) - PMCP0ID, data->vectorData( ) );
+ else if ( data->valueID( ) >= PMUV0ID && data->valueID( ) <= PMUV3ID )
+ setUVVector( data->valueID( ) - PMUV0ID, data->vectorData( ) );
+ else
+ kdError( PMArea ) << "Wrong ID in PMBicubicPatch::restoreMemento\n";
+ break;
+ }
+ }
+ }
+ Base::restoreMemento( s );
+}
+
+void PMBicubicPatch::createViewStructure( )
+{
+ int u, v, i, j;
+ int uSteps = m_numUSteps, vSteps = m_numVSteps;
+ if( uSteps > 5 ) uSteps = 5;
+ if( vSteps > 5 ) vSteps = 5;
+ if( uSteps < 0 ) uSteps = 0;
+ if( vSteps < 0 ) vSteps = 0;
+
+ // bugfix: Swap u and v
+ int segmentsU = pmpot( 2, vSteps );
+ int segmentsV = pmpot( 2, uSteps );
+
+ int np = ( segmentsU + 1 ) * ( segmentsV + 1 );
+ int nl = segmentsU * ( segmentsV + 1 ) + ( segmentsU + 1 ) * segmentsV;
+
+ int offset = 0;
+
+ if( !m_pViewStructure )
+ {
+ m_pViewStructure = new PMViewStructure( np, nl );
+ m_vsUSteps = uSteps + 1;
+ }
+ else
+ {
+ if( m_pViewStructure->points( ).size( ) != ( unsigned ) np )
+ m_pViewStructure->points( ).resize( np );
+ if( m_pViewStructure->lines( ).size( ) != ( unsigned ) nl )
+ m_pViewStructure->lines( ).resize( nl );
+ }
+
+ if( ( m_vsUSteps != uSteps ) || ( m_vsVSteps != vSteps ) )
+ {
+ PMLineArray& lines = m_pViewStructure->lines( );
+ int poffset = 0;
+ for( v = 0; v < ( segmentsV + 1 ); v++ )
+ {
+ for( u = 0; u < segmentsU; u++ )
+ {
+ lines[offset + u] = PMLine( poffset, poffset + 1 );
+ poffset++;
+ }
+ poffset++;
+ offset += segmentsU;
+ }
+ poffset = 0;
+ for( v = 0; v < segmentsV; v++ )
+ {
+ for( u = 0; u < ( segmentsU + 1 ); u++ )
+ {
+ lines[offset + u] = PMLine( poffset, poffset + segmentsU + 1 );
+ poffset++;
+ }
+ offset += segmentsU + 1;
+ }
+ m_vsUSteps = uSteps;
+ m_vsVSteps = vSteps;
+ }
+
+ PMPointArray& points = m_pViewStructure->points( );
+
+ offset = 0;
+ double incU = 1.0 / segmentsU;
+ double incV = 1.0 / segmentsV;
+
+ PMVector* hp[4];
+ for( v = 0; v < 4; v++ )
+ hp[v] = new PMVector[segmentsU+1];
+
+ PMVector tp[4];
+
+ double cu, cv;
+
+ // points in u direction
+ for( v = 0; v < 4; v++ )
+ {
+ for( u = 1; u < segmentsU; u++ )
+ {
+ cu = u * incU;
+
+ for( i = 0; i < 4; i++ )
+ tp[i] = m_point[v*4+i];
+ for( i = 3; i > 0; i-- )
+ for( j = 0; j < i; j++ )
+ tp[j] = tp[j] * ( 1 - cu ) + tp[j+1] * cu;
+ hp[v][u] = tp[0];
+ }
+ hp[v][0] = m_point[v*4];
+ hp[v][segmentsU] = m_point[v*4+3];
+ }
+
+ for( v = 0; v <= segmentsV; v++ )
+ {
+ cv = v * incV;
+ for( u = 0; u <= segmentsU; u++ )
+ {
+ for( i = 0; i < 4; i++ )
+ tp[i] = hp[i][u];
+ for( i = 3; i > 0; i-- )
+ for( j = 0; j < i; j++ )
+ tp[j] = tp[j] * ( 1 - cv ) + tp[j+1] * cv;
+ points[offset] = tp[0];
+ offset++;
+ }
+ }
+
+ for( v = 0; v < 4; v++ )
+ delete[] hp[v];
+}
+
+void PMBicubicPatch::controlPoints( PMControlPointList& list )
+{
+ int u, v;
+ for( v = 0; v < 4; v++ )
+ for( u = 0; u < 4; u++ )
+ list.append( new PM3DControlPoint( m_point[u+v*4], u+v*4,
+ i18n( "Point (%1, %2)" ).arg( u ).arg( v ) ) );
+}
+
+void PMBicubicPatch::controlPointsChanged( PMControlPointList& list )
+{
+ PMControlPoint* p;
+
+ for( p = list.first( ); p; p = list.next( ) )
+ {
+ if( p->changed( ) )
+ {
+ setControlPoint( p->id( ), p->position( ) );
+ }
+ }
+}
diff --git a/kpovmodeler/pmbicubicpatch.h b/kpovmodeler/pmbicubicpatch.h
new file mode 100644
index 00000000..c7ca6b3b
--- /dev/null
+++ b/kpovmodeler/pmbicubicpatch.h
@@ -0,0 +1,188 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2001-2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBICUBICPATCH_H
+#define PMBICUBICPATCH_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmgraphicalobject.h"
+#include "pmvector.h"
+
+class PMViewStructure;
+
+/**
+ * Class for povray bicubic patches (bezier patches).
+ */
+
+class PMBicubicPatch : public PMGraphicalObject
+{
+ typedef PMGraphicalObject Base;
+public:
+ /**
+ * Creates an empty PMBicubicPatch
+ */
+ PMBicubicPatch( PMPart* part );
+ /**
+ * Copy constructor
+ */
+ PMBicubicPatch( const PMBicubicPatch& p );
+ /**
+ * deletes the PMBicubicPatch
+ */
+ virtual ~PMBicubicPatch( );
+
+ /** */
+ virtual PMObject* copy( ) const { return new PMBicubicPatch( *this ); }
+ /** */
+ virtual QString description( ) const;
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+ /** */
+ virtual void cleanUp( ) const;
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+ /** */
+ virtual void readAttributes( const PMXMLHelper& h );
+ /**
+ * Returns a new @ref PMBicubicPatchEdit
+ */
+ virtual PMDialogEditBase* editWidget( QWidget* parent ) const;
+ /**
+ * Returns the name of the pixmap that is displayed in the tree view
+ * and dialog view
+ */
+ virtual QString pixmap( ) const { return QString( "pmbicubicpatch" ); }
+
+ /** */
+ virtual void restoreMemento( PMMemento* s );
+ /** */
+ virtual void controlPoints( PMControlPointList& list );
+ /** */
+ virtual void controlPointsChanged( PMControlPointList& list );
+ /** */
+ virtual bool multipleSelectControlPoints( ) const { return true; }
+
+ /**
+ * Sets the type. Type must be 0 or 1
+ */
+ void setPatchType( int type );
+ /**
+ * Returns the type
+ */
+ int patchType( ) const { return m_patchType; }
+ /**
+ * Sets the number of u steps
+ */
+ void setUSteps( int steps );
+ /**
+ * Returns the number of u steps
+ */
+ int uSteps( ) const { return m_numUSteps; }
+ /**
+ * Sets the number of v steps
+ */
+ void setVSteps( int steps );
+ /**
+ * Returns the number of v steps
+ */
+ int vSteps( ) const { return m_numVSteps; }
+ /**
+ * Sets the flatness
+ */
+ void setFlatness( double f );
+ /**
+ * Returns the flatness
+ */
+ double flatness( ) const { return m_flatness; }
+
+ /**
+ * Sets the ith patch control point
+ */
+ void setControlPoint( int i, const PMVector& p );
+ /**
+ * Returns the ith patch control point
+ */
+ PMVector controlPoint( int i ) const;
+
+ /**
+ * Sets the uv vectors flag
+ */
+ void enableUV( bool yes );
+ /**
+ * Returns the uv vectors flag
+ */
+ bool isUVEnabled( ) const { return m_uvEnabled; }
+ /**
+ * Sets the ith uv vector
+ */
+ void setUVVector( int i, const PMVector& v );
+ /**
+ * Returns the ith uv vector
+ */
+ PMVector uvVector( int i ) const;
+
+protected:
+ /** */
+ virtual bool isDefault( ) { return false; }
+ /** */
+ virtual void createViewStructure( );
+ /** */
+ virtual PMViewStructure* defaultViewStructure( ) const { return 0; }
+
+private:
+ /**
+ * IDs for @ref PMMementoData
+ */
+ enum PMBicubicPatchMementoID { PMTypeID, PMFlatnessID, PMUStepsID,
+ PMVStepsID,
+ PMCP0ID, PMCP1ID, PMCP2ID, PMCP3ID,
+ PMCP4ID, PMCP5ID, PMCP6ID, PMCP7ID,
+ PMCP8ID, PMCP9ID, PMCP10ID, PMCP11ID,
+ PMCP12ID, PMCP13ID, PMCP14ID, PMCP15ID,
+ PMUVEnabledID,
+ PMUV0ID, PMUV1ID, PMUV2ID, PMUV3ID };
+
+ /**
+ * The patch type
+ */
+ int m_patchType;
+ /**
+ * Number of subdivisions
+ */
+ int m_numUSteps, m_numVSteps;
+ /**
+ * Flatness of the patch
+ */
+ double m_flatness;
+ /**
+ * The control points
+ */
+ PMVector m_point[16];
+ int m_vsUSteps, m_vsVSteps;
+ bool m_uvEnabled;
+ PMVector m_uvVectors[4];
+
+ static PMMetaObject* s_pMetaObject;
+};
+
+#endif
diff --git a/kpovmodeler/pmbicubicpatchedit.cpp b/kpovmodeler/pmbicubicpatchedit.cpp
new file mode 100644
index 00000000..6ead96ae
--- /dev/null
+++ b/kpovmodeler/pmbicubicpatchedit.cpp
@@ -0,0 +1,218 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2001-2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmbicubicpatchedit.h"
+#include "pmbicubicpatch.h"
+#include "pmvectoredit.h"
+#include "pmlineedits.h"
+#include "pmvectorlistedit.h"
+#include "pmpart.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <klocale.h>
+
+PMBicubicPatchEdit::PMBicubicPatchEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMBicubicPatchEdit::createTopWidgets( )
+{
+ Base::createTopWidgets( );
+
+ QHBoxLayout* layout;
+
+ m_pType = new QComboBox( false, this );
+ m_pType->insertItem( i18n( "Normal (type 0)" ) );
+ m_pType->insertItem( i18n( "Preprocessed (type 1)" ) );
+ layout = new QHBoxLayout( topLayout( ) );
+ layout->addWidget( new QLabel( i18n( "Type:" ), this ) );
+ layout->addWidget( m_pType );
+ layout->addStretch( 1 );
+
+ m_pUSteps = new PMIntEdit( this );
+ m_pUSteps->setValidation( true, 0, false, 0 );
+ layout = new QHBoxLayout( topLayout( ) );
+ layout->addWidget( new QLabel( i18n( "Steps:" ) + " u", this ) );
+ layout->addWidget( m_pUSteps );
+ m_pVSteps = new PMIntEdit( this );
+ m_pVSteps->setValidation( true, 0, false, 0 );
+ layout->addWidget( new QLabel( "v", this ) );
+ layout->addWidget( m_pVSteps );
+
+ m_pFlatness = new PMFloatEdit( this );
+ m_pFlatness->setValidation( true, 0.0, false, 0.0 );
+ layout = new QHBoxLayout( topLayout( ) );
+ layout->addWidget( new QLabel( i18n( "Flatness:" ), this ) );
+ layout->addWidget( m_pFlatness );
+ layout->addStretch( 1 );
+
+ topLayout( )->addWidget( new QLabel( i18n( "Points:" ), this ) );
+
+ m_pPoints = new PMVectorListEdit( "x", "y", "z", this );
+ m_pPoints->setSize( 16 );
+ topLayout( )->addWidget( m_pPoints );
+
+ m_pUVEnabled = new QCheckBox( i18n( "UV vectors" ), this );
+ topLayout( )->addWidget( m_pUVEnabled );
+ m_pUVVectors = new PMVectorListEdit( "u", "v", this );
+ m_pUVVectors->setSize( 4 );
+ topLayout( )->addWidget( m_pUVVectors );
+
+ connect( m_pType, SIGNAL( highlighted( int ) ), SLOT( slotTypeSelected( int ) ) );
+ connect( m_pUSteps, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pVSteps, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pFlatness, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pPoints, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pPoints, SIGNAL( selectionChanged( ) ),
+ SLOT( slotSelectionChanged( ) ) );
+ connect( m_pUVEnabled, SIGNAL( clicked( ) ), SLOT( slotUVEnabledClicked( ) ) );
+ connect( m_pUVVectors, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+}
+
+void PMBicubicPatchEdit::displayObject( PMObject* o )
+{
+ int i;
+ if( o->isA( "BicubicPatch" ) )
+ {
+ bool readOnly = o->isReadOnly( );
+ m_pDisplayedObject = ( PMBicubicPatch* ) o;
+
+ m_pType->setCurrentItem( m_pDisplayedObject->patchType( ) );
+ m_pType->setEnabled( !readOnly );
+ m_pUSteps->setValue( m_pDisplayedObject->uSteps( ) );
+ m_pUSteps->setReadOnly( readOnly );
+ m_pVSteps->setValue( m_pDisplayedObject->vSteps( ) );
+ m_pVSteps->setReadOnly( readOnly );
+ m_pFlatness->setValue( m_pDisplayedObject->flatness( ) );
+ m_pFlatness->setReadOnly( readOnly );
+
+ for( i = 0; i < 16; i++ )
+ m_pPoints->setVector( i, m_pDisplayedObject->controlPoint( i ) );
+ m_pPoints->setReadOnly( readOnly );
+ updateControlPointSelection( );
+
+ m_pUVEnabled->setChecked( m_pDisplayedObject->isUVEnabled( ) );
+ m_pUVEnabled->setEnabled( !readOnly );
+ for( i = 0; i < 4; ++i )
+ m_pUVVectors->setVector( i, m_pDisplayedObject->uvVector( i ) );
+ m_pUVVectors->setReadOnly( readOnly );
+ slotUVEnabledClicked( );
+
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMBicubicPatchEdit: Can't display object\n";
+}
+
+void PMBicubicPatchEdit::updateControlPointSelection( )
+{
+ PMControlPointList cp = part( )->activeControlPoints( );
+ PMControlPointListIterator it( cp );
+ int s = 0, e = 0;
+
+ m_pPoints->blockSelectionUpdates( true );
+ bool sb = m_pPoints->signalsBlocked( );
+ m_pPoints->blockSignals( true );
+
+ m_pPoints->clearSelection( );
+ while( s < 16 )
+ {
+ if( ( *it )->selected( ) )
+ {
+ for( e = s; e < 16 && ( *it )->selected( ); e++ )
+ ++it;
+ m_pPoints->select( s, e - 1 );
+ s = e;
+ }
+ else
+ {
+ s++;
+ ++it;
+ }
+ }
+
+ m_pPoints->blockSignals( sb );
+ m_pPoints->blockSelectionUpdates( false );
+}
+
+void PMBicubicPatchEdit::saveContents( )
+{
+ int i;
+
+ if( m_pDisplayedObject )
+ {
+ Base::saveContents( );
+ m_pDisplayedObject->setPatchType( m_pType->currentItem( ) );
+ m_pDisplayedObject->setUSteps( m_pUSteps->value( ) );
+ m_pDisplayedObject->setVSteps( m_pVSteps->value( ) );
+ m_pDisplayedObject->setFlatness( m_pFlatness->value( ) );
+ for( i = 0; i < 16; i++ )
+ m_pDisplayedObject->setControlPoint( i, m_pPoints->vector( i ) );
+ m_pDisplayedObject->enableUV( m_pUVEnabled->isChecked( ) );
+ for( i = 0; i < 4; ++i )
+ m_pDisplayedObject->setUVVector( i, m_pUVVectors->vector( i ) );
+ }
+}
+
+bool PMBicubicPatchEdit::isDataValid( )
+{
+ bool ok = false;
+ if( m_pUSteps->isDataValid( ) )
+ if( m_pVSteps->isDataValid( ) )
+ if( m_pFlatness->isDataValid( ) )
+ ok = true;
+ if( ok )
+ ok = m_pPoints->isDataValid( );
+ if( ok && m_pUVEnabled->isChecked( ) )
+ ok = m_pUVVectors->isDataValid( );
+ if( ok )
+ return Base::isDataValid( );
+ return false;
+}
+
+void PMBicubicPatchEdit::slotTypeSelected( int )
+{
+ emit dataChanged( );
+}
+
+void PMBicubicPatchEdit::slotSelectionChanged( )
+{
+ PMControlPointList cp = part( )->activeControlPoints( );
+ PMControlPointListIterator it( cp );
+ int i;
+ for( i = 0; i < 16; i++, ++it )
+ ( *it )->setSelected( m_pPoints->isSelected( i ) );
+ emit controlPointSelectionChanged( );
+}
+
+void PMBicubicPatchEdit::slotUVEnabledClicked( )
+{
+ if( m_pUVEnabled->isChecked( ) )
+ m_pUVVectors->show( );
+ else
+ m_pUVVectors->hide( );
+ emit dataChanged( );
+ emit sizeChanged( );
+}
+
+#include "pmbicubicpatchedit.moc"
diff --git a/kpovmodeler/pmbicubicpatchedit.h b/kpovmodeler/pmbicubicpatchedit.h
new file mode 100644
index 00000000..41d173c1
--- /dev/null
+++ b/kpovmodeler/pmbicubicpatchedit.h
@@ -0,0 +1,80 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2001-2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBICUBICPATCHEDIT_H
+#define PMBICUBICPATCHEDIT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmgraphicalobjectedit.h"
+
+class PMBicubicPatch;
+class PMIntEdit;
+class PMFloatEdit;
+class PMVectorListEdit;
+class QComboBox;
+class QCheckBox;
+
+/**
+ * Dialog edit class for @ref PMBicubicPatch
+ */
+class PMBicubicPatchEdit : public PMGraphicalObjectEdit
+{
+ Q_OBJECT
+ typedef PMGraphicalObjectEdit Base;
+public:
+ /**
+ * Creates a PMBicubicPatchEdit with parent and name
+ */
+ PMBicubicPatchEdit( QWidget* parent, const char* name = 0 );
+
+ /** */
+ virtual void displayObject( PMObject* o );
+ /** */
+ virtual void updateControlPointSelection( );
+
+ /** */
+ virtual bool isDataValid( );
+
+protected slots:
+ void slotTypeSelected( int i );
+ void slotSelectionChanged( );
+ void slotUVEnabledClicked( );
+protected:
+ /** */
+ virtual void createTopWidgets( );
+ /** */
+ virtual void saveContents( );
+
+private:
+ QComboBox* m_pType;
+ PMIntEdit* m_pUSteps;
+ PMIntEdit* m_pVSteps;
+ PMFloatEdit* m_pFlatness;
+ PMVectorListEdit* m_pPoints;
+ QCheckBox* m_pUVEnabled;
+ PMVectorListEdit* m_pUVVectors;
+
+ PMBicubicPatch* m_pDisplayedObject;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmblendmapmodifiers.cpp b/kpovmodeler/pmblendmapmodifiers.cpp
new file mode 100644
index 00000000..0259fb90
--- /dev/null
+++ b/kpovmodeler/pmblendmapmodifiers.cpp
@@ -0,0 +1,284 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Luis Carvalho
+ email : lpassos@mail.telepac.pt
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#include "pmblendmapmodifiers.h"
+#include "pmxmlhelper.h"
+#include "pmmemento.h"
+#include "pmblendmapmodifiersedit.h"
+#include "pmvector.h"
+#include "pmenumproperty.h"
+
+#include <klocale.h>
+
+PMDefinePropertyClass( PMBlendMapModifiers, PMBlendMapModifiersProperty );
+PMDefineEnumPropertyClass( PMBlendMapModifiers,
+ PMBlendMapModifiers::PMWaveFormType,
+ PMWaveFormProperty );
+
+PMMetaObject* PMBlendMapModifiers::s_pMetaObject = 0;
+PMObject* createBlendMapModifiers( PMPart* part )
+{
+ return new PMBlendMapModifiers( part );
+}
+
+const double frequencyDefault = 1.0;
+const double phaseDefault = 0.0;
+const PMBlendMapModifiers::PMWaveFormType waveFormTypeDefault = PMBlendMapModifiers::RampWave;
+const double waveFormExponentDefault = 1.0;
+
+
+PMBlendMapModifiers::PMBlendMapModifiers( PMPart* part )
+ : Base( part )
+{
+ m_enableFrequency = false;
+ m_frequency = frequencyDefault;
+ m_enablePhase = false;
+ m_phase = phaseDefault;
+ m_enableWaveForm = false;
+ m_waveFormType = waveFormTypeDefault;
+ m_waveFormExponent = waveFormExponentDefault;
+}
+
+PMBlendMapModifiers::~PMBlendMapModifiers( )
+{
+}
+
+PMMetaObject* PMBlendMapModifiers::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "BlendMapModifiers", Base::metaObject( ),
+ createBlendMapModifiers );
+ s_pMetaObject->addProperty(
+ new PMBlendMapModifiersProperty( "frequencyEnabled", &PMBlendMapModifiers::enableFrequency,
+ &PMBlendMapModifiers::isFrequencyEnabled ) );
+ s_pMetaObject->addProperty(
+ new PMBlendMapModifiersProperty( "frequency", &PMBlendMapModifiers::setFrequency,
+ &PMBlendMapModifiers::frequency ) );
+ s_pMetaObject->addProperty(
+ new PMBlendMapModifiersProperty( "phaseEnabled", &PMBlendMapModifiers::enablePhase,
+ &PMBlendMapModifiers::isPhaseEnabled ) );
+ s_pMetaObject->addProperty(
+ new PMBlendMapModifiersProperty( "phase", &PMBlendMapModifiers::setPhase,
+ &PMBlendMapModifiers::phase ) );
+ s_pMetaObject->addProperty(
+ new PMBlendMapModifiersProperty( "waveFormEnabled", &PMBlendMapModifiers::enableWaveForm,
+ &PMBlendMapModifiers::isWaveFormEnabled ) );
+ s_pMetaObject->addProperty(
+ new PMBlendMapModifiersProperty( "waveFormExponent", &PMBlendMapModifiers::setWaveFormExponent,
+ &PMBlendMapModifiers::waveFormExponent ) );
+
+ PMWaveFormProperty* p = new PMWaveFormProperty(
+ "waveForm", &PMBlendMapModifiers::setWaveFormType,
+ &PMBlendMapModifiers::waveFormType );
+ p->addEnumValue( QString( "RampWave" ), RampWave );
+ p->addEnumValue( QString( "TriangleWave" ), TriangleWave );
+ p->addEnumValue( QString( "SineWave" ), SineWave );
+ p->addEnumValue( QString( "ScallopWave" ), ScallopWave );
+ p->addEnumValue( QString( "CubicWave" ), CubicWave );
+ p->addEnumValue( QString( "PolyWave" ), PolyWave );
+ s_pMetaObject->addProperty( p );
+ }
+ return s_pMetaObject;
+}
+
+void PMBlendMapModifiers::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+QString PMBlendMapModifiers::description( ) const
+{
+ return i18n( "blend map modifiers" );
+}
+
+void PMBlendMapModifiers::serialize( QDomElement& e, QDomDocument& ) const
+{
+ e.setAttribute( "frequency", m_frequency );
+ e.setAttribute( "phase", m_phase );
+ e.setAttribute( "enable_frequency", m_enableFrequency );
+ e.setAttribute( "enable_phase", m_enablePhase );
+ e.setAttribute( "wave_exponent", m_waveFormExponent );
+ e.setAttribute( "enable_wave", m_enableWaveForm );
+ switch( m_waveFormType )
+ {
+ case RampWave:
+ e.setAttribute( "waveform_type", "ramp" );
+ break;
+ case TriangleWave:
+ e.setAttribute( "waveform_type", "triangle" );
+ break;
+ case SineWave:
+ e.setAttribute( "waveform_type", "sine" );
+ break;
+ case ScallopWave:
+ e.setAttribute( "waveform_type", "scallop" );
+ break;
+ case CubicWave:
+ e.setAttribute( "waveform_type", "cubic" );
+ break;
+ case PolyWave:
+ e.setAttribute( "waveform_type", "poly" );
+ break;
+ }
+}
+
+void PMBlendMapModifiers::readAttributes( const PMXMLHelper& h )
+{
+ QString str = h.stringAttribute( "waveform_type", "ramp" );
+
+ if( str == "ramp" )
+ m_waveFormType = RampWave;
+ else if( str == "triangle" )
+ m_waveFormType = TriangleWave;
+ else if( str == "sine" )
+ m_waveFormType = SineWave;
+ else if( str == "scallop" )
+ m_waveFormType = ScallopWave;
+ else if( str == "cubic" )
+ m_waveFormType = CubicWave;
+ else if( str == "poly" )
+ m_waveFormType = PolyWave;
+ m_frequency = h.doubleAttribute( "frequency", frequencyDefault );
+ m_enableFrequency = h.boolAttribute( "enable_frequency", false );
+ m_phase = h.doubleAttribute( "phase", phaseDefault );
+ m_enablePhase = h.boolAttribute( "enable_phase", false );
+ m_enableWaveForm = h.boolAttribute( "enable_wave", false );
+ m_waveFormExponent = h.doubleAttribute( "wave_exponent", waveFormExponentDefault );
+}
+
+void PMBlendMapModifiers::setFrequency( double c )
+{
+ if( c != m_frequency )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMFrequencyID, m_frequency );
+ m_frequency = c;
+ }
+}
+
+void PMBlendMapModifiers::enableFrequency( bool c )
+{
+ if( c != m_enableFrequency )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMEnableFrequencyID, m_enableFrequency );
+ m_enableFrequency = c;
+ }
+}
+
+void PMBlendMapModifiers::setPhase( double c )
+{
+ if( c != m_phase )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMPhaseID, m_phase );
+ m_phase = c;
+ }
+}
+
+void PMBlendMapModifiers::enablePhase( bool c )
+{
+ if( c != m_enablePhase )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMEnablePhaseID, m_enablePhase );
+ m_enablePhase = c;
+ }
+}
+
+void PMBlendMapModifiers::enableWaveForm( bool c )
+{
+ if( c != m_enableWaveForm )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMEnableWaveFormID, m_enableWaveForm );
+ m_enableWaveForm = c;
+ }
+}
+
+void PMBlendMapModifiers::setWaveFormExponent( double c )
+{
+ if( c != m_waveFormExponent )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMWaveFormExponentID, m_waveFormExponent );
+ m_waveFormExponent = c;
+ }
+}
+
+void PMBlendMapModifiers::setWaveFormType( PMWaveFormType c )
+{
+ if( c != m_waveFormType )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMWaveFormTypeID, m_waveFormType );
+ m_waveFormType = c;
+ }
+}
+
+PMDialogEditBase* PMBlendMapModifiers::editWidget( QWidget* parent ) const
+{
+ return new PMBlendMapModifiersEdit( parent );
+}
+
+void PMBlendMapModifiers::restoreMemento( PMMemento* s )
+{
+ PMMementoDataIterator it( s );
+ PMMementoData* data;
+
+ for( ; it.current( ); ++it )
+ {
+ data = it.current( );
+ if( data->objectType( ) == s_pMetaObject )
+ {
+ switch( data->valueID( ) )
+ {
+ case PMFrequencyID:
+ setFrequency( data->doubleData( ) );
+ break;
+ case PMEnableFrequencyID:
+ enableFrequency( data->boolData( ) );
+ break;
+ case PMPhaseID:
+ setPhase( data->doubleData( ) );
+ break;
+ case PMEnablePhaseID:
+ enablePhase( data->boolData( ) );
+ break;
+ case PMWaveFormTypeID:
+ setWaveFormType( ( PMWaveFormType )data->intData( ) );
+ break;
+ case PMEnableWaveFormID:
+ enableWaveForm( data->boolData( ) );
+ break;
+ case PMWaveFormExponentID:
+ setWaveFormExponent( data->doubleData( ) );
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMBlendMapModifiers::restoreMemento\n";
+ break;
+ }
+ }
+ }
+ Base::restoreMemento( s );
+}
diff --git a/kpovmodeler/pmblendmapmodifiers.h b/kpovmodeler/pmblendmapmodifiers.h
new file mode 100644
index 00000000..1fa45528
--- /dev/null
+++ b/kpovmodeler/pmblendmapmodifiers.h
@@ -0,0 +1,129 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Luis Carvalho
+ email : lpassos@mail.telepac.pt
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBLENDMAPMODIFIERS_H
+#define PMBLENDMAPMODIFIERS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmtexturebase.h"
+#include "pmcolor.h"
+#include "pmvector.h"
+
+/**
+ * Class for povray blendmapmodifierss
+ */
+class PMBlendMapModifiers : public PMObject
+{
+ typedef PMObject Base;
+public:
+ /**
+ * The type of the wave form
+ */
+ enum PMWaveFormType { RampWave, TriangleWave, SineWave, ScallopWave,
+ CubicWave, PolyWave };
+
+ /**
+ * Creates an PMBlendMapModifiers
+ */
+ PMBlendMapModifiers( PMPart* part );
+ /**
+ * Deletes the object
+ */
+ virtual ~PMBlendMapModifiers( );
+
+ /** */
+ virtual PMObject* copy( ) const { return new PMBlendMapModifiers( *this ); }
+
+ /** */
+ virtual QString description( ) const;
+
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+ /** */
+ virtual void cleanUp( ) const;
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+ /** */
+ virtual void readAttributes( const PMXMLHelper& h );
+
+ /**
+ * Returns a new @ref PMBlendMapModifiersEdit
+ */
+ virtual PMDialogEditBase* editWidget( QWidget* parent ) const;
+ /** */
+ virtual QString pixmap( ) const { return QString( "pmblendmapmodifiers" ); }
+
+ /** */
+ virtual void restoreMemento( PMMemento* s );
+
+ /** */
+ bool isFrequencyEnabled( ) const { return m_enableFrequency; }
+ /** */
+ double frequency( ) const { return m_frequency; }
+ /** */
+ bool isPhaseEnabled( ) const { return m_enablePhase; }
+ /** */
+ double phase( ) const { return m_phase; }
+ /** */
+ bool isWaveFormEnabled( ) const { return m_enableWaveForm; }
+ /** */
+ PMWaveFormType waveFormType( ) const { return m_waveFormType; }
+ /** */
+ double waveFormExponent( ) const { return m_waveFormExponent; }
+
+ /** */
+ void enableFrequency( bool c );
+ /** */
+ void setFrequency( double c );
+ /** */
+ void enablePhase( bool c );
+ /** */
+ void setPhase( double c );
+ /** */
+ void enableWaveForm( bool c );
+ /** */
+ void setWaveFormType( PMWaveFormType c );
+ /** */
+ void setWaveFormExponent( double c );
+
+private:
+ /**
+ * IDs for @ref PMMementoData
+ */
+ enum PMBlendMapModifiersMementoID { PMEnableFrequencyID, PMFrequencyID,
+ PMEnablePhaseID, PMPhaseID, PMEnableWaveFormID,
+ PMWaveFormTypeID, PMWaveFormExponentID };
+
+ bool m_enableFrequency;
+ double m_frequency;
+ bool m_enablePhase;
+ double m_phase;
+ bool m_enableWaveForm;
+ PMWaveFormType m_waveFormType;
+ double m_waveFormExponent;
+
+ static PMMetaObject* s_pMetaObject;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmblendmapmodifiersedit.cpp b/kpovmodeler/pmblendmapmodifiersedit.cpp
new file mode 100644
index 00000000..8e8ff150
--- /dev/null
+++ b/kpovmodeler/pmblendmapmodifiersedit.cpp
@@ -0,0 +1,261 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2001 by Luis Carvalho
+ email : lpassos@mail.telepac.pt
+ copyright : (C) 2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmblendmapmodifiersedit.h"
+#include "pmblendmapmodifiers.h"
+#include "pmvectoredit.h"
+#include "pmlineedits.h"
+#include "pmvector.h"
+
+#include <qwidget.h>
+#include <qlayout.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#include <ktabctl.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kdialog.h>
+#include <kfiledialog.h>
+
+PMBlendMapModifiersEdit::PMBlendMapModifiersEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMBlendMapModifiersEdit::createTopWidgets( )
+{
+ QHBoxLayout* hl;
+
+ Base::createTopWidgets( );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ m_pEnableFrequencyEdit = new QCheckBox( i18n( "Frequency:" ), this );
+ m_pFrequencyEdit = new PMFloatEdit( this );
+ hl->addWidget( m_pEnableFrequencyEdit );
+ hl->addWidget( m_pFrequencyEdit );
+ hl->addStretch( 1 );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ m_pEnablePhaseEdit = new QCheckBox( i18n( "Phase:" ), this );
+ m_pPhaseEdit = new PMFloatEdit( this );
+ hl->addWidget( m_pEnablePhaseEdit );
+ hl->addWidget( m_pPhaseEdit );
+ hl->addStretch( 1 );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ m_pEnableWaveFormEdit = new QCheckBox( i18n( "Wave form:" ), this );
+ m_pWaveTypeCombo = new QComboBox( this );
+ m_pWaveTypeCombo->insertItem( i18n( "Ramp" ) );
+ m_pWaveTypeCombo->insertItem( i18n( "Triangle" ) );
+ m_pWaveTypeCombo->insertItem( i18n( "Sine" ) );
+ m_pWaveTypeCombo->insertItem( i18n( "Scallop" ) );
+ m_pWaveTypeCombo->insertItem( i18n( "Cubic" ) );
+ m_pWaveTypeCombo->insertItem( i18n( "Poly" ) );
+ hl->addWidget( m_pEnableWaveFormEdit );
+ hl->addWidget( m_pWaveTypeCombo );
+ hl->addStretch( 1 );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ m_pWaveExponentLabel = new QLabel( i18n( "Exponent:" ), this );
+ m_pWaveExponentEdit = new PMFloatEdit( this );
+ hl->addWidget( m_pWaveExponentLabel );
+ hl->addWidget( m_pWaveExponentEdit );
+ hl->addStretch( 1 );
+
+ connect( m_pEnableFrequencyEdit, SIGNAL( clicked( ) ), SLOT( slotFrequencyClicked( ) ) );
+ connect( m_pFrequencyEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pEnablePhaseEdit, SIGNAL( clicked( ) ), SLOT( slotPhaseClicked( ) ) );
+ connect( m_pPhaseEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pEnableWaveFormEdit, SIGNAL( clicked( ) ), SLOT( slotWaveFormClicked( ) ) );
+ connect( m_pWaveExponentEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pWaveTypeCombo, SIGNAL( activated( int ) ), SLOT( slotTypeComboChanged( int ) ) );
+}
+
+void PMBlendMapModifiersEdit::displayObject( PMObject* o )
+{
+ QString str;
+
+ if( o->isA( "BlendMapModifiers" ) )
+ {
+ m_pDisplayedObject = ( PMBlendMapModifiers* ) o;
+
+ m_pEnableFrequencyEdit->setChecked( m_pDisplayedObject->isFrequencyEnabled( ) );
+ m_pEnablePhaseEdit->setChecked( m_pDisplayedObject->isPhaseEnabled( ) );
+ m_pEnableWaveFormEdit->setChecked( m_pDisplayedObject->isWaveFormEnabled( ) );
+
+ m_pFrequencyEdit->setValue( m_pDisplayedObject->frequency( ) );
+ m_pPhaseEdit->setValue( m_pDisplayedObject->phase( ) );
+ m_pWaveExponentEdit->setValue( m_pDisplayedObject->waveFormExponent( ) );
+
+ switch( m_pDisplayedObject->waveFormType( ) )
+ {
+ case PMBlendMapModifiers::RampWave:
+ m_pWaveTypeCombo->setCurrentItem( 0 );
+ break;
+ case PMBlendMapModifiers::TriangleWave:
+ m_pWaveTypeCombo->setCurrentItem( 1 );
+ break;
+ case PMBlendMapModifiers::SineWave:
+ m_pWaveTypeCombo->setCurrentItem( 2 );
+ break;
+ case PMBlendMapModifiers::ScallopWave:
+ m_pWaveTypeCombo->setCurrentItem( 3 );
+ break;
+ case PMBlendMapModifiers::CubicWave:
+ m_pWaveTypeCombo->setCurrentItem( 4 );
+ break;
+ case PMBlendMapModifiers::PolyWave:
+ m_pWaveTypeCombo->setCurrentItem( 5 );
+ break;
+ }
+
+ slotFrequencyClicked( );
+ slotPhaseClicked( );
+ slotWaveFormClicked( );
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMBlendMapModifiersEdit: Can't display object\n";
+}
+
+void PMBlendMapModifiersEdit::setBlendMapModifiersType( int i )
+{
+ m_pWaveTypeCombo->setCurrentItem( i );
+ slotTypeComboChanged( i );
+}
+
+void PMBlendMapModifiersEdit::saveContents( )
+{
+ if( m_pDisplayedObject )
+ {
+ Base::saveContents( );
+
+ m_pDisplayedObject->enableFrequency( m_pEnableFrequencyEdit->isChecked( ) );
+ m_pDisplayedObject->enablePhase( m_pEnablePhaseEdit->isChecked( ) );
+ m_pDisplayedObject->enableWaveForm( m_pEnableWaveFormEdit->isChecked( ) );
+
+ if( m_pEnableFrequencyEdit->isChecked( ) )
+ m_pDisplayedObject->setFrequency( m_pFrequencyEdit->value( ) );
+
+ if( m_pEnablePhaseEdit->isChecked( ) )
+ m_pDisplayedObject->setPhase( m_pPhaseEdit->value( ) );
+
+ if( m_pEnableWaveFormEdit->isChecked( ) )
+ {
+ switch( m_pWaveTypeCombo->currentItem( ) )
+ {
+ case 0: /* Ramp Wave */
+ m_pDisplayedObject->setWaveFormType( PMBlendMapModifiers::RampWave );
+ break;
+ case 1: /* Triangle Wave */
+ m_pDisplayedObject->setWaveFormType( PMBlendMapModifiers::TriangleWave );
+ break;
+ case 2: /* Sine Wave */
+ m_pDisplayedObject->setWaveFormType( PMBlendMapModifiers::SineWave );
+ break;
+ case 3: /* Scallop Wave */
+ m_pDisplayedObject->setWaveFormType( PMBlendMapModifiers::ScallopWave );
+ break;
+ case 4: /* Cubic Wave */
+ m_pDisplayedObject->setWaveFormType( PMBlendMapModifiers::CubicWave );
+ break;
+ case 5: /* Poly Wave */
+ m_pDisplayedObject->setWaveFormType( PMBlendMapModifiers::PolyWave );
+ m_pDisplayedObject->setWaveFormExponent( m_pWaveExponentEdit->value( ) );
+ break;
+ }
+ }
+ }
+}
+
+bool PMBlendMapModifiersEdit::isDataValid( )
+{
+ if( !m_pFrequencyEdit->isDataValid( ) ) return false;
+ if( !m_pPhaseEdit->isDataValid( ) ) return false;
+
+ switch( m_pWaveTypeCombo->currentItem( ) )
+ {
+ case 5: /* Poly Wave */
+ if( !m_pWaveExponentEdit->isDataValid( ) ) return false;
+ break;
+ }
+
+ return Base::isDataValid( );
+}
+
+void PMBlendMapModifiersEdit::slotTypeComboChanged( int c )
+{
+ switch( c )
+ {
+ case 5: /* Poly Wave */
+ m_pWaveExponentLabel->show( );
+ m_pWaveExponentEdit->show( );
+ break;
+ default:
+ m_pWaveExponentLabel->hide( );
+ m_pWaveExponentEdit->hide( );
+ break;
+ }
+ emit dataChanged( );
+ emit sizeChanged( );
+}
+
+void PMBlendMapModifiersEdit::slotFrequencyClicked( )
+{
+ if( m_pEnableFrequencyEdit->isChecked( ) )
+ m_pFrequencyEdit->setEnabled( true );
+ else
+ m_pFrequencyEdit->setEnabled( false );
+ emit dataChanged( );
+ emit sizeChanged( );
+}
+
+void PMBlendMapModifiersEdit::slotPhaseClicked( )
+{
+ if(m_pEnablePhaseEdit->isChecked( ) )
+ m_pPhaseEdit->setEnabled( true );
+ else
+ m_pPhaseEdit->setEnabled( false );
+ emit dataChanged( );
+ emit sizeChanged( );
+}
+
+void PMBlendMapModifiersEdit::slotWaveFormClicked( )
+{
+ if(m_pEnableWaveFormEdit->isChecked( ) )
+ {
+ m_pWaveTypeCombo->setEnabled( true );
+ slotTypeComboChanged( m_pWaveTypeCombo->currentItem( ) );
+ }
+ else
+ {
+ m_pWaveTypeCombo->setEnabled( false );
+ m_pWaveExponentLabel->hide( );
+ m_pWaveExponentEdit->hide( );
+ }
+ emit dataChanged( );
+ emit sizeChanged( );
+}
+
+#include "pmblendmapmodifiersedit.moc"
diff --git a/kpovmodeler/pmblendmapmodifiersedit.h b/kpovmodeler/pmblendmapmodifiersedit.h
new file mode 100644
index 00000000..eb4e40b5
--- /dev/null
+++ b/kpovmodeler/pmblendmapmodifiersedit.h
@@ -0,0 +1,100 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Luis Carvalho
+ email : lpassos@mail.telepac.pt
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBLENDMAPMODIFIERSEDIT_H
+#define PMBLENDMAPMODIFIERSEDIT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmdialogeditbase.h"
+
+class PMBlendMapModifiers;
+class PMVectorEdit;
+class QComboBox;
+class PMFloatEdit;
+class PMIntEdit;
+class QLabel;
+class QCheckBox;
+class QWidget;
+class QLineEdit;
+class QPushButton;
+
+/**
+ * Dialog edit class for @ref PMBlendMapModifiers.
+ */
+class PMBlendMapModifiersEdit : public PMDialogEditBase
+{
+ Q_OBJECT
+ typedef PMDialogEditBase Base;
+public:
+ /**
+ * Creates a PMBlendMapModifiersEdit with parent and name
+ */
+ PMBlendMapModifiersEdit( QWidget* parent, const char* name = 0 );
+
+ /** */
+ virtual void displayObject( PMObject* o );
+
+ /** */
+ virtual bool isDataValid( );
+protected:
+ /** */
+ virtual void createTopWidgets( );
+ /** */
+ virtual void saveContents( );
+
+protected slots:
+ /**
+ * Slot called whenever a new Wave Form type is selected.
+ */
+ void slotTypeComboChanged( int c );
+ /**
+ * Slot called when frequency is activated/deactivated.
+ */
+ void slotFrequencyClicked( );
+ /**
+ * Slot called when phase is activated/deactivated.
+ */
+ void slotPhaseClicked( );
+ /**
+ * Slot called when wave form is activated/deactivated.
+ */
+ void slotWaveFormClicked( );
+
+private:
+ /**
+ * Set's the combo box and enables/disables widgets.
+ */
+ void setBlendMapModifiersType( int i );
+ PMBlendMapModifiers* m_pDisplayedObject;
+
+ QComboBox* m_pWaveTypeCombo;
+ PMFloatEdit* m_pFrequencyEdit;
+ PMFloatEdit* m_pPhaseEdit;
+ PMFloatEdit* m_pWaveExponentEdit;
+ QLabel* m_pWaveExponentLabel;
+ QCheckBox* m_pEnableFrequencyEdit;
+ QCheckBox* m_pEnablePhaseEdit;
+ QCheckBox* m_pEnableWaveFormEdit;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmblob.cpp b/kpovmodeler/pmblob.cpp
new file mode 100644
index 00000000..800c3b5a
--- /dev/null
+++ b/kpovmodeler/pmblob.cpp
@@ -0,0 +1,175 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmblob.h"
+
+#include "pmxmlhelper.h"
+#include "pmblobedit.h"
+#include "pmmemento.h"
+
+#include <klocale.h>
+
+const double c_defaultThreshold = 0.5;
+bool c_defaultSturm = false;
+bool c_defaultHierarchy = false;
+
+PMDefinePropertyClass( PMBlob, PMBlobProperty );
+
+PMMetaObject* PMBlob::s_pMetaObject = 0;
+PMObject* createNewBlob( PMPart* part )
+{
+ return new PMBlob( part );
+}
+
+PMBlob::PMBlob( PMPart* part )
+ : Base( part )
+{
+ m_threshold = c_defaultThreshold;
+ m_sturm = c_defaultSturm;
+ m_hierarchy = c_defaultHierarchy;
+}
+
+PMBlob::PMBlob( const PMBlob& b )
+ : Base( b )
+{
+ m_threshold = b.m_threshold;
+ m_sturm = b.m_sturm;
+ m_hierarchy = b.m_hierarchy;
+}
+
+PMBlob::~PMBlob( )
+{
+}
+
+QString PMBlob::description( ) const
+{
+ return i18n( "blob" );
+}
+
+void PMBlob::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ e.setAttribute( "threshold", m_threshold );
+ e.setAttribute( "sturm", m_sturm );
+ e.setAttribute( "hierarchy", m_hierarchy );
+ Base::serialize( e, doc );
+}
+
+void PMBlob::readAttributes( const PMXMLHelper& h )
+{
+ m_threshold = h.doubleAttribute( "threshold", c_defaultThreshold );
+ m_sturm = h.boolAttribute( "sturm", c_defaultSturm );
+ m_hierarchy = h.boolAttribute( "hierarchy", c_defaultHierarchy );
+ Base::readAttributes( h );
+}
+
+PMMetaObject* PMBlob::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "Blob", Base::metaObject( ),
+ createNewBlob );
+ s_pMetaObject->addProperty(
+ new PMBlobProperty( "threshold", &PMBlob::setThreshold, &PMBlob::threshold ) );
+ s_pMetaObject->addProperty(
+ new PMBlobProperty( "hierarchy", &PMBlob::setHierarchy, &PMBlob::hierarchy ) );
+ s_pMetaObject->addProperty(
+ new PMBlobProperty( "sturm", &PMBlob::setSturm, &PMBlob::sturm ) );
+ }
+ return s_pMetaObject;
+}
+
+void PMBlob::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+void PMBlob::setThreshold( double t )
+{
+ if( t <= 0.0 )
+ {
+ kdError( PMArea ) << "Threshold is not positive in PMBlob::setThreshold\n";
+ t = 1.0;
+ }
+
+ if( t != m_threshold )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMThresholdID, m_threshold );
+ m_threshold = t;
+ }
+}
+
+void PMBlob::setSturm( bool s )
+{
+ if( s != m_sturm )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMSturmID, m_sturm );
+ m_sturm = s;
+ }
+}
+
+void PMBlob::setHierarchy( bool h )
+{
+ if( h != m_hierarchy )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMHierarchyID, m_hierarchy );
+ m_hierarchy = h;
+ }
+}
+
+PMDialogEditBase* PMBlob::editWidget( QWidget* parent ) const
+{
+ return new PMBlobEdit( parent );
+}
+
+void PMBlob::restoreMemento( PMMemento* s )
+{
+ PMMementoDataIterator it( s );
+ PMMementoData* data;
+
+ for( ; it.current( ); ++it )
+ {
+ data = it.current( );
+ if( data->objectType( ) == s_pMetaObject )
+ {
+ switch( data->valueID( ) )
+ {
+ case PMThresholdID:
+ setThreshold( data->doubleData( ) );
+ break;
+ case PMSturmID:
+ setSturm( data->boolData( ) );
+ break;
+ case PMHierarchyID:
+ setHierarchy( data->boolData( ) );
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMBlob::restoreMemento\n";
+ break;
+ }
+ }
+ }
+ Base::restoreMemento( s );
+}
diff --git a/kpovmodeler/pmblob.h b/kpovmodeler/pmblob.h
new file mode 100644
index 00000000..986cec8c
--- /dev/null
+++ b/kpovmodeler/pmblob.h
@@ -0,0 +1,113 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBLOB_H
+#define PMBLOB_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmsolidobject.h"
+
+/**
+ * Class for povray blobs.
+ */
+
+class PMBlob : public PMSolidObject
+{
+ typedef PMSolidObject Base;
+public:
+ /**
+ * Creates an empty PMBlob
+ */
+ PMBlob( PMPart* part );
+ /**
+ * Copy constructor
+ */
+ PMBlob( const PMBlob& b );
+ /**
+ * deletes the PMBlob
+ */
+ virtual ~PMBlob( );
+
+ /** */
+ virtual PMObject* copy( ) const { return new PMBlob( *this ); }
+ /** */
+ virtual QString description( ) const;
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+ /** */
+ virtual void cleanUp( ) const;
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+ /** */
+ virtual void readAttributes( const PMXMLHelper& h );
+ /**
+ * Returns a new @ref PMBlobEdit
+ */
+ virtual PMDialogEditBase* editWidget( QWidget* parent ) const;
+ /**
+ * Returns the name of the pixmap that is displayed in the tree view
+ * and dialog view
+ */
+ virtual QString pixmap( ) const { return QString( "pmblob" ); }
+
+ /**
+ * Returns the threshold
+ */
+ double threshold( ) const { return m_threshold; }
+ /**
+ * Sets the threshold
+ */
+ void setThreshold( double t );
+ /**
+ * Returns the hierarchy flag
+ */
+ bool hierarchy( ) const { return m_hierarchy; }
+ /**
+ * Sets the hierarchy flag
+ */
+ void setHierarchy( bool h );
+ /**
+ * Returns the sturm flag
+ */
+ bool sturm( ) const { return m_sturm; }
+ /**
+ * Sets the sturm flag
+ */
+ void setSturm( bool s );
+
+ /** */
+ virtual void restoreMemento( PMMemento* s );
+
+private:
+ /**
+ * IDs for @ref PMMementoData
+ */
+ enum PMBlobMementoID { PMThresholdID, PMHierarchyID, PMSturmID };
+ double m_threshold;
+ bool m_hierarchy;
+ bool m_sturm;
+
+ static PMMetaObject* s_pMetaObject;
+};
+
+#endif
diff --git a/kpovmodeler/pmblobcylinder.cpp b/kpovmodeler/pmblobcylinder.cpp
new file mode 100644
index 00000000..687ce132
--- /dev/null
+++ b/kpovmodeler/pmblobcylinder.cpp
@@ -0,0 +1,468 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmblobcylinder.h"
+
+#include "pmxmlhelper.h"
+#include "pmboxedit.h"
+#include "pmmemento.h"
+#include "pm3dcontrolpoint.h"
+#include "pmdefaults.h"
+#include "pmdistancecontrolpoint.h"
+#include "pmblobcylinderedit.h"
+
+#include <klocale.h>
+
+PMDefinePropertyClass( PMBlobCylinder, PMBlobCylinderProperty );
+
+PMMetaObject* PMBlobCylinder::s_pMetaObject = 0;
+PMObject* createNewBlobCylinder( PMPart* part )
+{
+ return new PMBlobCylinder( part );
+}
+
+const double c_defaultRadius = 0.5;
+const PMVector c_defaultEnd1 = PMVector ( 0, 0.5, 0 );
+const PMVector c_defaultEnd2 = PMVector ( 0, -0.5, 0 );
+const double c_defaultStrength = 1.0;
+
+/** default cylinder structure */
+PMViewStructure* PMBlobCylinder::s_pDefaultViewStructure = 0;
+int PMBlobCylinder::s_vStep = c_defaultBlobCylinderVSteps;
+int PMBlobCylinder::s_uStep = c_defaultBlobCylinderUSteps;
+int PMBlobCylinder::s_parameterKey = 0;
+
+
+PMBlobCylinder::PMBlobCylinder( PMPart* part )
+ : Base( part )
+{
+ m_end1 = c_defaultEnd1;
+ m_end2 = c_defaultEnd2;
+ m_radius = c_defaultRadius;
+ m_strength = c_defaultStrength;
+}
+
+PMBlobCylinder::PMBlobCylinder( const PMBlobCylinder& c )
+ : Base( c )
+{
+ m_end1 = c.m_end1;
+ m_end2 = c.m_end2;
+ m_radius = c.m_radius;
+ m_strength = c.m_strength;
+}
+
+PMBlobCylinder::~PMBlobCylinder( )
+{
+}
+
+QString PMBlobCylinder::description( ) const
+{
+ return i18n( "blob cylinder" );
+}
+
+void PMBlobCylinder::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ e.setAttribute( "end_a", m_end1.serializeXML( ) );
+ e.setAttribute( "end_b", m_end2.serializeXML( ) );
+ e.setAttribute( "radius", m_radius );
+ e.setAttribute( "strength", m_strength );
+ Base::serialize( e, doc );
+}
+
+void PMBlobCylinder::readAttributes( const PMXMLHelper& h )
+{
+ m_end1 = h.vectorAttribute( "end_a", c_defaultEnd1 );
+ m_end2 = h.vectorAttribute( "end_b", c_defaultEnd2 );
+ m_radius = h.doubleAttribute( "radius", c_defaultRadius );
+ m_strength = h.doubleAttribute( "strength", c_defaultStrength );
+ Base::readAttributes( h );
+}
+
+PMMetaObject* PMBlobCylinder::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "BlobCylinder", Base::metaObject( ),
+ createNewBlobCylinder );
+ s_pMetaObject->addProperty(
+ new PMBlobCylinderProperty( "end1", &PMBlobCylinder::setEnd1,
+ &PMBlobCylinder::end1 ) );
+ s_pMetaObject->addProperty(
+ new PMBlobCylinderProperty( "end2", &PMBlobCylinder::setEnd2,
+ &PMBlobCylinder::end2 ) );
+ s_pMetaObject->addProperty(
+ new PMBlobCylinderProperty( "radius", &PMBlobCylinder::setRadius,
+ &PMBlobCylinder::radius ) );
+ s_pMetaObject->addProperty(
+ new PMBlobCylinderProperty( "strength", &PMBlobCylinder::setStrength,
+ &PMBlobCylinder::strength ) );
+ }
+ return s_pMetaObject;
+}
+
+void PMBlobCylinder::setEnd1( const PMVector& p )
+{
+ if( p != m_end1 )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMEnd1ID, m_end1 );
+ m_end1 = p;
+ m_end1.resize( 3 );
+ setViewStructureChanged( );
+ }
+}
+
+void PMBlobCylinder::setEnd2( const PMVector& p )
+{
+ if( p != m_end2 )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMEnd2ID, m_end2 );
+ m_end2 = p;
+ m_end2.resize( 3 );
+ setViewStructureChanged( );
+ }
+}
+
+void PMBlobCylinder::setRadius( double radius )
+{
+ if( m_radius != radius )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMRadiusID, m_radius );
+ m_radius = radius;
+ setViewStructureChanged( );
+ }
+}
+
+void PMBlobCylinder::setStrength( double s )
+{
+ if( s != m_strength )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMStrengthID, m_strength );
+ m_strength = s;
+ }
+}
+
+PMDialogEditBase* PMBlobCylinder::editWidget( QWidget* parent ) const
+{
+ return new PMBlobCylinderEdit( parent );
+}
+
+void PMBlobCylinder::restoreMemento( PMMemento* s )
+{
+ PMMementoDataIterator it( s );
+ PMMementoData* data;
+
+ for( ; it.current( ); ++it )
+ {
+ data = it.current( );
+ if( data->objectType( ) == s_pMetaObject )
+ {
+ switch( data->valueID( ) )
+ {
+ case PMEnd1ID:
+ setEnd1( data->vectorData( ) );
+ break;
+ case PMEnd2ID:
+ setEnd2( data->vectorData( ) );
+ break;
+ case PMRadiusID:
+ setRadius( data->doubleData( ) );
+ break;
+ case PMStrengthID:
+ setStrength( data->doubleData( ) );
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMBlobCylinder::restoreMemento\n";
+ break;
+ }
+ }
+ }
+ Base::restoreMemento( s );
+}
+
+bool PMBlobCylinder::isDefault( )
+{
+ if( ( m_end1 == c_defaultEnd1 ) && ( m_end2 == c_defaultEnd2 )
+ && ( m_radius == c_defaultRadius )
+ && globalDetail( ) )
+ return true;
+ return false;
+}
+
+void PMBlobCylinder::createViewStructure( )
+{
+ if( !m_pViewStructure )
+ {
+ m_pViewStructure = new PMViewStructure( defaultViewStructure ( ) );
+ m_pViewStructure->points( ).detach( );
+ }
+
+ int uStep = (int)( ( (float)s_uStep / 2 ) * ( displayDetail( ) + 1 ) );
+ int vStep = (int)( ( (float)s_vStep / 2 ) * ( displayDetail( ) + 1 ) );
+ unsigned ptsSize = vStep * uStep * 2 + 2;
+ unsigned lineSize = vStep * uStep * 4 + vStep;
+
+ if( ptsSize != m_pViewStructure->points( ).size( ) )
+ m_pViewStructure->points( ).resize( ptsSize );
+
+ createPoints( m_pViewStructure->points( ), m_end1, m_end2, m_radius, uStep, vStep );
+
+ if( lineSize != m_pViewStructure->lines( ).size( ) )
+ {
+ m_pViewStructure->lines( ).detach( );
+ m_pViewStructure->lines( ).resize( lineSize );
+ createLines( m_pViewStructure->lines( ), uStep, vStep );
+ }
+}
+
+PMViewStructure* PMBlobCylinder::defaultViewStructure( ) const
+{
+ if( !s_pDefaultViewStructure || s_pDefaultViewStructure->parameterKey( ) != viewStructureParameterKey( ) )
+ {
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ int uStep = (int)( ( (float)s_uStep / 2 ) * ( displayDetail( ) + 1 ) );
+ int vStep = (int)( ( (float)s_vStep / 2 ) * ( displayDetail( ) + 1 ) );
+
+ s_pDefaultViewStructure =
+ new PMViewStructure( vStep * uStep * 2 + 2,
+ vStep * uStep * 4 + vStep );
+
+ createPoints( s_pDefaultViewStructure->points( ), c_defaultEnd1,
+ c_defaultEnd2, c_defaultRadius, uStep, vStep );
+
+ createLines( s_pDefaultViewStructure->lines( ), uStep, vStep );
+ }
+ return s_pDefaultViewStructure;
+}
+
+void PMBlobCylinder::createLines( PMLineArray& lines, int uStep, int vStep )
+{
+ int u, v;
+ int offset = 0;
+
+ // horizontal lines
+ for( u = 0; u < ( uStep * 2 ); u++ )
+ {
+ for( v = 0; v < ( vStep - 1 ); v++ )
+ lines[offset + v] =
+ PMLine( u * vStep + v + 1, u * vStep + v + 2 );
+ lines[offset + vStep - 1] =
+ PMLine( u * vStep + 1, u * vStep + vStep );
+
+ offset += vStep;
+ }
+
+ // vertical lines
+ // lines at the "north pole"
+ for( v = 0; v < vStep; v++ )
+ lines[offset + v] = PMLine( 0, v + 1 );
+ offset += vStep;
+
+ for( v = 0; v < vStep; v++ )
+ {
+ for( u = 0; u < ( 2 * uStep - 1 ); u++ )
+ {
+ lines[offset + u] =
+ PMLine( u * vStep + v + 1, ( u + 1 ) * vStep + v + 1 );
+ }
+ offset += ( 2 * uStep - 1 );
+ }
+ // lines at the "south pole"
+ for( v = 0; v < vStep; v++ )
+ lines[offset + v] = PMLine( ( 2 * uStep - 1 ) * vStep + v + 1,
+ 2 * uStep * vStep + 1 );
+ // offset += vStep;
+}
+
+void PMBlobCylinder::createPoints( PMPointArray& points, const PMVector& end1,
+ const PMVector& end2, double radius, int uStep, int vStep )
+{
+ double uRadStep = M_PI / uStep / 2.0;
+ double vRadStep = 2 * M_PI / vStep;
+ double du = uRadStep;
+
+ if( radius < 0 )
+ radius = -radius;
+
+ PMVector pointAt = end2 - end1;
+ double pl = pointAt.abs( );
+ if( approxZero( pl ) )
+ pointAt = PMVector( 0.0, 0.0, 1.0 );
+ else
+ pointAt /= pl;
+
+ PMMatrix rotation = PMMatrix::rotation( pointAt, vRadStep );
+ PMVector ortho = pointAt.orthogonal( );
+ ortho /= ortho.abs( );
+
+ points[0] = PMPoint( end1 - pointAt * radius );
+ points[vStep * uStep * 2 + 1] = PMPoint( end2 + pointAt * radius );
+
+ int u, v;
+ for( u = 0; u < uStep; u++ )
+ {
+ PMVector end = ortho * radius * sin( du );
+ PMVector pv = pointAt * radius * cos( du );
+ PMVector e1 = end1 - pv;
+ PMVector e2 = end2 + pv;
+
+ for( v = 0; v < vStep; v++ )
+ {
+ points[u * vStep + v + 1] = PMPoint( e1 + end );
+ points[vStep * uStep * 2 - ( u + 1 ) * vStep + v + 1]
+ = PMPoint( e2 + end );
+ end = rotation * end;
+ }
+ du += uRadStep;
+ }
+}
+
+void PMBlobCylinder::controlPoints( PMControlPointList & list )
+{
+ PMVector center, angle1, angle2;
+ center = m_end1 - m_end2;
+ double pl = center.abs( );
+ if( approxZero( pl ) )
+ center = PMVector( 0.0, 1.0, 0.0 );
+ else
+ center /= pl;
+
+ angle1 = center.orthogonal( );
+ angle2 = PMVector::cross( center, angle1 );
+
+ PM3DControlPoint* pb = new PM3DControlPoint( m_end1, PMEnd1ID, i18n( "End 1" ) );
+ list.append( pb );
+ list.append( new PM3DControlPoint( m_end2, PMEnd2ID, i18n( "End 2" ) ) );
+ list.append( new PMDistanceControlPoint( pb, angle1, m_radius, PMRadiusID, i18n( "Radius (1)" ) ) );
+ list.append( new PMDistanceControlPoint( pb, angle2, m_radius, PMRadiusID, i18n( "Radius (2)" ) ) );
+}
+
+
+void PMBlobCylinder::controlPointsChanged( PMControlPointList & list )
+{
+ PMControlPoint* p;
+ bool pointChanged = false;
+ bool radiusChanged = false;
+
+ for( p = list.first( ); p; p = list.next( ) )
+ {
+ if( p->changed( ) )
+ {
+ switch( p->id( ) )
+ {
+ case PMEnd1ID:
+ setEnd1( ( ( PM3DControlPoint *) p)->point( ) );
+ pointChanged = true;
+ break;
+ case PMEnd2ID:
+ setEnd2( ( ( PM3DControlPoint *) p)->point( ) );
+ pointChanged = true;
+ break;
+ case PMRadiusID:
+ setRadius( ( ( PMDistanceControlPoint *) p)->distance( ) );
+ radiusChanged = true;
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMBlobCylinder::controlPointsChanged\n";
+ break;
+ }
+ }
+ }
+
+ if( pointChanged )
+ {
+ PMVector center, angle1, angle2;
+ bool firstPoint = true;
+
+ center = m_end1 - m_end2;
+ double pl = center.abs( );
+ if( approxZero( pl ) )
+ center = PMVector( 0.0, 1.0, 0.0 );
+ else
+ center /= pl;
+
+ angle1 = center.orthogonal( );
+ angle2 = PMVector::cross( center, angle1 );
+
+ for( p = list.first( ); p; p = list.next( ) )
+ if( p->id( ) == PMRadiusID )
+ {
+ if( firstPoint )
+ {
+ ( ( PMDistanceControlPoint *) p)->setDirection( angle1 );
+ firstPoint = false;
+ }
+ else
+ ( ( PMDistanceControlPoint *) p)->setDirection( angle2 );
+ }
+ }
+
+ if( radiusChanged )
+ for( p = list.first( ); p; p = list.next( ) )
+ if( p->id( ) == PMRadiusID )
+ ( ( PMDistanceControlPoint *) p)->setDistance( m_radius );
+}
+
+void PMBlobCylinder::setUSteps( int u )
+{
+ if( u >= 2 )
+ {
+ s_uStep = u;
+ if( s_pDefaultViewStructure )
+ {
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ }
+ }
+ else
+ kdDebug( PMArea ) << "PMBlobCylinder::setUSteps: U must be greater than 1\n";
+ s_parameterKey++;
+}
+
+void PMBlobCylinder::setVSteps( int v )
+{
+ if( v >= 4 )
+ {
+ s_vStep = v;
+ if( s_pDefaultViewStructure )
+ {
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ }
+ }
+ else
+ kdDebug( PMArea ) << "PMBlobCylinder::setVSteps: V must be greater than 3\n";
+ s_parameterKey++;
+}
+
+void PMBlobCylinder::cleanUp( ) const
+{
+ if( s_pDefaultViewStructure )
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
diff --git a/kpovmodeler/pmblobcylinder.h b/kpovmodeler/pmblobcylinder.h
new file mode 100644
index 00000000..80986cfe
--- /dev/null
+++ b/kpovmodeler/pmblobcylinder.h
@@ -0,0 +1,181 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBLOBCYLINDER_H
+#define PMBLOBCYLINDER_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmdetailobject.h"
+#include "pmvector.h"
+#include "pmviewstructure.h"
+
+/**
+ * Class for povray blob cylinder
+ */
+
+class PMBlobCylinder : public PMDetailObject
+{
+ typedef PMDetailObject Base;
+public:
+ /**
+ * Creates a cylinder
+ */
+ PMBlobCylinder( PMPart* part );
+ /**
+ * Copy constructor
+ */
+ PMBlobCylinder( const PMBlobCylinder& c );
+
+ /**
+ * Deletes the cylinder
+ */
+ virtual ~PMBlobCylinder( );
+
+ /** */
+ virtual PMObject* copy( ) const { return new PMBlobCylinder( *this ); }
+
+ /** */
+ virtual QString description( ) const;
+
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+ /** */
+ virtual void readAttributes( const PMXMLHelper& h );
+ /**
+ * Returns a new @ref PMBlobCylinderEdit
+ */
+ virtual PMDialogEditBase* editWidget( QWidget* parent ) const;
+ /**
+ * Returns the name of the pixmap that is displayed in the tree view and dialog view
+ */
+ virtual QString pixmap( ) const { return QString( "pmblobcylinder" ); }
+
+ /**
+ * Return the end_1
+ */
+ PMVector end1( ) const { return m_end1; }
+ /**
+ * Sets end_1
+ */
+ void setEnd1( const PMVector& p );
+ /**
+ * Return the end_2
+ */
+ PMVector end2( ) const { return m_end2; }
+ /**
+ * Sets end_2
+ */
+ void setEnd2( const PMVector& p );
+ /**
+ * return the radius of the cylinder
+ */
+ double radius( ) const { return m_radius; }
+ /**
+ * Sets the radius of the cylinder
+ */
+ void setRadius( double radius );
+ /**
+ * Returns the strength
+ */
+ double strength( ) const { return m_strength; }
+ /**
+ * Sets the strength
+ */
+ void setStrength( double s );
+
+ /**
+ * Sets the number of latitutes
+ */
+ static void setUSteps( int u );
+ /**
+ * Sets the number of longitudes
+ */
+ static void setVSteps( int v );
+ /**
+ * Returns the number or latitutes
+ */
+ static int uSteps( ) { return s_uStep; }
+ /**
+ * Returns the number or longitudes
+ */
+ static int vSteps( ) { return s_vStep; }
+
+ /** */
+ virtual void restoreMemento( PMMemento* s );
+ /** */
+ virtual void controlPoints( PMControlPointList& list );
+ /** */
+ virtual void controlPointsChanged( PMControlPointList& list );
+ /** */
+ virtual bool hasDisplayDetail( ) const { return true; }
+ /** */
+ virtual void cleanUp( ) const;
+
+protected:
+ /** */
+ virtual bool isDefault( );
+ /** */
+ virtual void createViewStructure( );
+ /** */
+ virtual PMViewStructure *defaultViewStructure( ) const;
+ /** */
+ virtual int viewStructureParameterKey( ) const { return s_parameterKey + globalDetailKey(); }
+
+private:
+ /**
+ * Creates the lines for the view structure
+ */
+ static void createLines( PMLineArray& lines, int uStep, int vStep );
+ /**
+ * Creates the points for the view structure
+ */
+ static void createPoints( PMPointArray& points, const PMVector& end1,
+ const PMVector& end2, double radius, int uStep, int vStep );
+
+ /**
+ * IDs for @ref PMMementoData
+ */
+ enum PMBlobCylinderMementoID { PMEnd1ID, PMEnd2ID, PMRadiusID, PMStrengthID };
+ /**
+ * ends of cylinder
+ */
+ PMVector m_end1, m_end2;
+ /**
+ * radius of cylinder
+ */
+ double m_radius;
+ double m_strength;
+ /**
+ * The default view structure. It can be shared between cylinders
+ */
+ static PMViewStructure* s_pDefaultViewStructure;
+ static int s_vStep;
+ static int s_uStep;
+ static int s_parameterKey;
+
+ static PMMetaObject* s_pMetaObject;
+};
+
+#endif
diff --git a/kpovmodeler/pmblobcylinderedit.cpp b/kpovmodeler/pmblobcylinderedit.cpp
new file mode 100644
index 00000000..9313b8af
--- /dev/null
+++ b/kpovmodeler/pmblobcylinderedit.cpp
@@ -0,0 +1,114 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmblobcylinderedit.h"
+#include "pmblobcylinder.h"
+#include "pmvectoredit.h"
+#include "pmlineedits.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <klocale.h>
+#include <qcheckbox.h>
+
+PMBlobCylinderEdit::PMBlobCylinderEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMBlobCylinderEdit::createTopWidgets( )
+{
+ Base::createTopWidgets( );
+
+ QHBoxLayout* layout;
+ QGridLayout* gl;
+
+ m_pEnd1 = new PMVectorEdit( "x", "y", "z", this );
+ m_pEnd2 = new PMVectorEdit( "x", "y", "z", this );
+ m_pRadius = new PMFloatEdit( this );
+ m_pStrength = new PMFloatEdit( this );
+
+ gl = new QGridLayout( topLayout( ), 2, 2 );
+ gl->addWidget( new QLabel( i18n( "End 1:" ), this ), 0, 0 );
+ gl->addWidget( m_pEnd1, 0, 1 );
+ gl->addWidget( new QLabel( i18n( "End 2:" ), this ), 1, 0 );
+ gl->addWidget( m_pEnd2, 1, 1 );
+
+ layout = new QHBoxLayout( topLayout( ) );
+ gl = new QGridLayout( layout, 2, 2 );
+ gl->addWidget( new QLabel( i18n( "Radius:" ), this ), 0, 0 );
+ gl->addWidget( m_pRadius, 0, 1 );
+ gl->addWidget( new QLabel( i18n( "Strength:" ), this ), 1, 0 );
+ gl->addWidget( m_pStrength, 1, 1 );
+ layout->addStretch( 1 );
+
+ connect( m_pEnd1, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pEnd2, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pRadius, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pStrength, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+}
+
+void PMBlobCylinderEdit::displayObject( PMObject* o )
+{
+ if( o->isA( "BlobCylinder" ) )
+ {
+ bool readOnly = o->isReadOnly( );
+ m_pDisplayedObject = ( PMBlobCylinder* ) o;
+
+ m_pEnd1->setVector( m_pDisplayedObject->end1( ) );
+ m_pEnd2->setVector( m_pDisplayedObject->end2( ) );
+ m_pRadius->setValue( m_pDisplayedObject->radius( ) );
+ m_pStrength->setValue( m_pDisplayedObject->strength( ) );
+
+ m_pEnd1->setReadOnly( readOnly );
+ m_pEnd2->setReadOnly( readOnly );
+ m_pRadius->setReadOnly( readOnly );
+ m_pStrength->setReadOnly( readOnly );
+
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMBlobCylinderEdit: Can't display object\n";
+}
+
+void PMBlobCylinderEdit::saveContents( )
+{
+ if( m_pDisplayedObject )
+ {
+ Base::saveContents( );
+ m_pDisplayedObject->setEnd1( m_pEnd1->vector( ) );
+ m_pDisplayedObject->setEnd2( m_pEnd2->vector( ) );
+ m_pDisplayedObject->setRadius( m_pRadius->value( ) );
+ m_pDisplayedObject->setStrength( m_pStrength->value( ) );
+ }
+}
+
+bool PMBlobCylinderEdit::isDataValid( )
+{
+ if( m_pEnd1->isDataValid( ) )
+ if( m_pEnd2->isDataValid( ) )
+ if( m_pRadius->isDataValid( ) )
+ if( m_pStrength->isDataValid( ) )
+ return Base::isDataValid( );
+ return false;
+}
+
+#include "pmblobcylinderedit.moc"
+
+
diff --git a/kpovmodeler/pmblobcylinderedit.h b/kpovmodeler/pmblobcylinderedit.h
new file mode 100644
index 00000000..d156e412
--- /dev/null
+++ b/kpovmodeler/pmblobcylinderedit.h
@@ -0,0 +1,61 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBLOBCYLINDEREDIT_H
+#define PMBLOBCYLINDEREDIT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmdetailobjectedit.h"
+
+class PMVectorEdit;
+class PMFloatEdit;
+class PMBlobCylinder;
+
+class PMBlobCylinderEdit : public PMDetailObjectEdit
+{
+ Q_OBJECT
+ typedef PMDetailObjectEdit Base;
+public:
+ /**
+ * Creates a PMBlobCylinderEdit with parent and name
+ */
+ PMBlobCylinderEdit( QWidget* parent, const char* name = 0 );
+
+ /** */
+ virtual void displayObject( PMObject* o );
+
+ /** */
+ virtual bool isDataValid( );
+protected:
+ /** */
+ virtual void createTopWidgets( );
+ /** */
+ virtual void saveContents( );
+
+private:
+ PMBlobCylinder* m_pDisplayedObject;
+ PMVectorEdit* m_pEnd1;
+ PMVectorEdit* m_pEnd2;
+ PMFloatEdit* m_pRadius;
+ PMFloatEdit* m_pStrength;
+};
+#endif
diff --git a/kpovmodeler/pmblobedit.cpp b/kpovmodeler/pmblobedit.cpp
new file mode 100644
index 00000000..80ebd510
--- /dev/null
+++ b/kpovmodeler/pmblobedit.cpp
@@ -0,0 +1,96 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmblobedit.h"
+#include "pmblob.h"
+#include "pmlineedits.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <klocale.h>
+
+PMBlobEdit::PMBlobEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMBlobEdit::createTopWidgets( )
+{
+ Base::createTopWidgets( );
+
+ QHBoxLayout* hl = new QHBoxLayout( topLayout( ) );
+ hl->addWidget( new QLabel( i18n( "Threshold:" ), this ) );
+ m_pThreshold = new PMFloatEdit( this );
+ hl->addWidget( m_pThreshold );
+ m_pThreshold->setValidation( true, 0.0, false, 0 );
+ m_pThreshold->setValidationOperator( PMFloatEdit::OpGreater,
+ PMFloatEdit::OpLess );
+ hl->addStretch( 1 );
+
+ m_pSturm = new QCheckBox( i18n( "Sturm" ), this );
+ topLayout( )->addWidget( m_pSturm );
+ m_pHierarchy = new QCheckBox( i18n( "Hierarchy" ), this );
+ topLayout( )->addWidget( m_pHierarchy );
+
+ connect( m_pThreshold, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pHierarchy, SIGNAL( clicked( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pSturm, SIGNAL( clicked( ) ), SIGNAL( dataChanged( ) ) );
+}
+
+void PMBlobEdit::displayObject( PMObject* o )
+{
+ if( o->isA( "Blob" ) )
+ {
+ bool readOnly = o->isReadOnly( );
+ m_pDisplayedObject = ( PMBlob* ) o;
+
+ m_pThreshold->setValue( m_pDisplayedObject->threshold( ) );
+ m_pSturm->setChecked( m_pDisplayedObject->sturm( ) );
+ m_pHierarchy->setChecked( m_pDisplayedObject->hierarchy( ) );
+
+ m_pThreshold->setReadOnly( readOnly );
+ m_pSturm->setEnabled( !readOnly );
+ m_pHierarchy->setEnabled( !readOnly );
+
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMBlobEdit: Can't display object\n";
+}
+
+void PMBlobEdit::saveContents( )
+{
+ if( m_pDisplayedObject )
+ {
+ Base::saveContents( );
+ m_pDisplayedObject->setThreshold( m_pThreshold->value( ) );
+ m_pDisplayedObject->setSturm( m_pSturm->isChecked( ) );
+ m_pDisplayedObject->setHierarchy( m_pHierarchy->isChecked( ) );
+ }
+}
+
+bool PMBlobEdit::isDataValid( )
+{
+ if( m_pThreshold->isDataValid( ) )
+ return Base::isDataValid( );
+ return false;
+}
+
+#include "pmblobedit.moc"
diff --git a/kpovmodeler/pmblobedit.h b/kpovmodeler/pmblobedit.h
new file mode 100644
index 00000000..df07ba30
--- /dev/null
+++ b/kpovmodeler/pmblobedit.h
@@ -0,0 +1,65 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBLOBEDIT_H
+#define PMBLOBEDIT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmsolidobjectedit.h"
+
+class PMBlob;
+class PMFloatEdit;
+class QCheckBox;
+
+/**
+ * Dialog edit class for @ref PMBlob
+ */
+class PMBlobEdit : public PMSolidObjectEdit
+{
+ Q_OBJECT
+ typedef PMSolidObjectEdit Base;
+public:
+ /**
+ * Creates a PMBlobEdit with parent and name
+ */
+ PMBlobEdit( QWidget* parent, const char* name = 0 );
+
+ /** */
+ virtual void displayObject( PMObject* o );
+
+ /** */
+ virtual bool isDataValid( );
+protected:
+ /** */
+ virtual void createTopWidgets( );
+ /** */
+ virtual void saveContents( );
+
+private:
+ PMBlob* m_pDisplayedObject;
+ PMFloatEdit* m_pThreshold;
+ QCheckBox* m_pSturm;
+ QCheckBox* m_pHierarchy;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmblobsphere.cpp b/kpovmodeler/pmblobsphere.cpp
new file mode 100644
index 00000000..6ca96769
--- /dev/null
+++ b/kpovmodeler/pmblobsphere.cpp
@@ -0,0 +1,391 @@
+/*
+**************************************************************************
+ description
+ -------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#include "pmblobsphere.h"
+
+#include "pmxmlhelper.h"
+#include "pmblobsphereedit.h"
+#include "pmmemento.h"
+#include "pm3dcontrolpoint.h"
+#include "pmdistancecontrolpoint.h"
+#include "pmdefaults.h"
+
+#include <klocale.h>
+
+PMDefinePropertyClass( PMBlobSphere, PMBlobSphereProperty );
+
+PMMetaObject* PMBlobSphere::s_pMetaObject = 0;
+PMObject* createNewBlobSphere( PMPart* part )
+{
+ return new PMBlobSphere( part );
+}
+
+/** default param for the sphere */
+const double c_defaultRadius = 0.5;
+const PMVector c_defaultCentre = PMVector( 0, 0, 0 );
+const double c_defaultStrength = 1.0;
+
+/** default sphere structure */
+PMViewStructure* PMBlobSphere::s_pDefaultViewStructure = 0;
+
+int PMBlobSphere::s_vStep = c_defaultBlobSphereVSteps;
+int PMBlobSphere::s_uStep = c_defaultBlobSphereUSteps;
+int PMBlobSphere::s_parameterKey = 0;
+
+PMBlobSphere::PMBlobSphere( PMPart* part )
+ : Base( part )
+{
+ m_radius = c_defaultRadius;
+ m_centre = c_defaultCentre;
+ m_strength = c_defaultStrength;
+}
+
+PMBlobSphere::PMBlobSphere( const PMBlobSphere& s )
+ : Base( s )
+{
+ m_radius = s.m_radius;
+ m_centre = s.m_centre;
+ m_strength = s.m_strength;
+}
+
+PMBlobSphere::~PMBlobSphere( )
+{
+}
+
+
+QString PMBlobSphere::description( ) const
+{
+ return i18n( "blob sphere" );
+}
+
+PMMetaObject* PMBlobSphere::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "BlobSphere", Base::metaObject( ),
+ createNewBlobSphere );
+ s_pMetaObject->addProperty(
+ new PMBlobSphereProperty( "center", &PMBlobSphere::setCentre,
+ &PMBlobSphere::centre ) );
+ s_pMetaObject->addProperty(
+ new PMBlobSphereProperty( "radius", &PMBlobSphere::setRadius,
+ &PMBlobSphere::radius ) );
+ s_pMetaObject->addProperty(
+ new PMBlobSphereProperty( "strength", &PMBlobSphere::setStrength,
+ &PMBlobSphere::strength ) );
+ }
+ return s_pMetaObject;
+}
+
+void PMBlobSphere::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ e.setAttribute( "centre", m_centre.serializeXML( ) );
+ e.setAttribute( "radius", m_radius );
+ e.setAttribute( "strength", m_strength );
+ Base::serialize( e, doc );
+}
+
+void PMBlobSphere::readAttributes( const PMXMLHelper& h )
+{
+ m_centre = h.vectorAttribute( "centre", c_defaultCentre );
+ m_radius = h.doubleAttribute( "radius", c_defaultRadius );
+ m_strength = h.doubleAttribute( "strength", c_defaultStrength );
+ Base::readAttributes( h );
+}
+
+PMDialogEditBase* PMBlobSphere::editWidget( QWidget* parent ) const
+{
+ return new PMBlobSphereEdit( parent );
+}
+
+void PMBlobSphere::restoreMemento( PMMemento* s )
+{
+ PMMementoDataIterator it( s );
+ PMMementoData* data;
+
+ for( ; it.current( ); ++it )
+ {
+ data = it.current( );
+ if( data->objectType( ) == s_pMetaObject )
+ {
+ switch( data->valueID( ) )
+ {
+ case PMRadiusID:
+ setRadius( data->doubleData( ) );
+ break;
+ case PMCentreID:
+ setCentre( data->vectorData( ) );
+ break;
+ case PMStrengthID:
+ setStrength( data->doubleData( ) );
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PBlobSphere::restoreMemento\n";
+ break;
+ }
+ }
+ }
+ Base::restoreMemento( s );
+
+}
+
+void PMBlobSphere::controlPoints( PMControlPointList& list )
+{
+ PM3DControlPoint* p = new PM3DControlPoint( m_centre, PMCentreID,
+ i18n( "Center" ) );
+ list.append( p );
+ list.append( new PMDistanceControlPoint( p, PMVector( 1.0, 0.0, 0.0 ),
+ m_radius, PMRadiusID,
+ i18n( "Radius (x)" ) ) );
+ list.append( new PMDistanceControlPoint( p, PMVector( 0.0, 1.0, 0.0 ),
+ m_radius, PMRadiusID,
+ i18n( "Radius (y)" ) ) );
+ list.append( new PMDistanceControlPoint( p, PMVector( 0.0, 0.0, 1.0 ),
+ m_radius, PMRadiusID,
+ i18n( "Radius (z)" ) ) );
+}
+
+void PMBlobSphere::controlPointsChanged( PMControlPointList& list )
+{
+ PMControlPoint* p;
+ bool radiusChanged = false;
+
+ for( p = list.first( ); p; p = list.next( ) )
+ {
+ if( p->changed( ) )
+ {
+ switch( p->id( ) )
+ {
+ case PMCentreID:
+ setCentre( ( ( PM3DControlPoint* ) p )->point( ) );
+ break;
+ case PMRadiusID:
+ setRadius( ( ( PMDistanceControlPoint* ) p )->distance( ) );
+ radiusChanged = true;
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMBlobSphere::controlPointsChanged\n";
+ break;
+ }
+ }
+ }
+
+ if( radiusChanged )
+ for( p = list.first( ); p; p = list.next( ) )
+ if( p->id( ) == PMRadiusID )
+ ( ( PMDistanceControlPoint* ) p )->setDistance( m_radius );
+}
+
+bool PMBlobSphere::isDefault( )
+{
+ if( ( m_radius == c_defaultRadius ) && ( m_centre == c_defaultCentre ) && globalDetail( ) )
+ return true;
+ return false;
+}
+
+void PMBlobSphere::createViewStructure( )
+{
+ if( !m_pViewStructure )
+ {
+ m_pViewStructure = new PMViewStructure( defaultViewStructure( ) );
+ m_pViewStructure->points( ).detach( );
+ }
+
+ int uStep = (int)( ( (float)s_uStep / 2 ) * ( displayDetail( ) + 1 ) );
+ int vStep = (int)( ( (float)s_vStep / 2 ) * ( displayDetail( ) + 1 ) );
+ unsigned ptsSize = vStep * ( uStep - 1 ) + 2;
+ unsigned lineSize = vStep * ( uStep - 1 ) * 2 + vStep;
+
+ if( ptsSize != m_pViewStructure->points( ).size( ) )
+ m_pViewStructure->points( ).resize( ptsSize );
+
+ createPoints( m_pViewStructure->points( ), m_centre, m_radius, uStep, vStep );
+
+ if( lineSize != m_pViewStructure->lines( ).size( ) )
+ {
+ m_pViewStructure->lines( ).detach( );
+ m_pViewStructure->lines( ).resize( lineSize );
+ createLines( m_pViewStructure->lines( ), uStep, vStep );
+ }
+}
+
+PMViewStructure* PMBlobSphere::defaultViewStructure( ) const
+{
+ if( !s_pDefaultViewStructure || s_pDefaultViewStructure->parameterKey( ) != viewStructureParameterKey( ) )
+ {
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ int uStep = (int)( ( (float)s_uStep / 2 ) * ( globalDetailLevel( ) + 1 ) );
+ int vStep = (int)( ( (float)s_vStep / 2 ) * ( globalDetailLevel( ) + 1 ) );
+
+ s_pDefaultViewStructure =
+ new PMViewStructure( vStep * ( uStep - 1 ) + 2,
+ vStep * ( uStep - 1 ) * 2 + vStep );
+
+ createPoints( s_pDefaultViewStructure->points( ), c_defaultCentre,
+ c_defaultRadius, uStep, vStep );
+
+ createLines( s_pDefaultViewStructure->lines( ), uStep, vStep );
+ }
+ return s_pDefaultViewStructure;
+}
+
+void PMBlobSphere::createLines( PMLineArray& lines, int uStep, int vStep )
+{
+ int u, v;
+ int offset = 0;
+
+ // horizontal lines
+ for( u = 0; u < ( uStep - 1 ); u++ )
+ {
+ for( v = 0; v < ( vStep - 1 ); v++ )
+ lines[offset + v] =
+ PMLine( u * vStep + v + 1, u * vStep + v + 2 );
+ lines[offset + vStep - 1] =
+ PMLine( u * vStep + 1, u * vStep + vStep );
+
+ offset += vStep;
+ }
+
+ // vertical lines
+ // lines at the "north pole"
+ for( v = 0; v < vStep; v++ )
+ lines[offset + v] = PMLine( 0, v + 1 );
+ offset += vStep;
+
+ for( v = 0; v < vStep; v++ )
+ {
+ for( u = 0; u < ( uStep - 2 ); u++ )
+ {
+ lines[offset + u] =
+ PMLine( u * vStep + v + 1, ( u + 1 ) * vStep + v + 1 );
+ }
+ offset += ( uStep - 2 );
+ }
+ // lines at the "south pole"
+ for( v = 0; v < vStep; v++ )
+ lines[offset + v] = PMLine( ( uStep - 2 ) * vStep + v + 1,
+ ( uStep - 1 ) * vStep + 1 );
+ // offset += vStep;
+}
+
+void PMBlobSphere::createPoints( PMPointArray& points, const PMVector& centre,
+ double radius, int uStep, int vStep )
+{
+ double l_UradStep = M_PI / uStep;
+ double l_VradStep = ( 2.0 * M_PI ) / vStep;
+ double l_u = l_UradStep;
+ int u, v;
+
+ points[0] = PMPoint( centre + PMVector( 0, radius, 0 ) );
+ points[vStep * ( uStep - 1 ) + 1] =
+ PMPoint( centre - PMVector( 0, radius, 0 ) );
+
+ for( u = 0; u < ( uStep - 1 ); u++ )
+ {
+ double l_v = 0.0;
+ double l_rcosu = radius * sin( l_u );
+ double y = ( radius * cos( l_u ) ) + centre[1];
+ for( v = 0; v < vStep ; v++ )
+ {
+
+ double x = ( l_rcosu * cos( l_v ) ) + centre[0];
+ double z = ( l_rcosu * sin( l_v ) ) + centre[2];
+
+ points[u * vStep + v + 1] = PMPoint( x, y, z );
+ l_v = l_v + l_VradStep;
+ }
+ l_u = l_u + l_UradStep;
+ }
+}
+
+void PMBlobSphere::setRadius( double radius )
+{
+ if( m_radius != radius )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMRadiusID, m_radius );
+ m_radius = radius;
+ setViewStructureChanged( );
+ }
+}
+
+void PMBlobSphere::setCentre( const PMVector& centre )
+{
+ if( m_centre != centre )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMCentreID, m_centre );
+ m_centre = centre;
+ setViewStructureChanged( );
+ }
+}
+
+void PMBlobSphere::setStrength( double s )
+{
+ if( m_strength != s )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMStrengthID, m_strength );
+ m_strength = s;
+ }
+}
+
+void PMBlobSphere::setUSteps( int u )
+{
+ if( u >= 2 )
+ {
+ s_uStep = u;
+ if( s_pDefaultViewStructure )
+ {
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ }
+ }
+ else
+ kdDebug( PMArea ) << "PMBlobSphere::setUSteps: U must be greater than 1\n";
+ s_parameterKey++;
+}
+
+void PMBlobSphere::setVSteps( int v )
+{
+ if( v >= 4 )
+ {
+ s_vStep = v;
+ if( s_pDefaultViewStructure )
+ {
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ }
+ }
+ else
+ kdDebug( PMArea ) << "PMBlobSphere::setVSteps: V must be greater than 3\n";
+ s_parameterKey++;
+}
+
+void PMBlobSphere::cleanUp( ) const
+{
+ if( s_pDefaultViewStructure )
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
diff --git a/kpovmodeler/pmblobsphere.h b/kpovmodeler/pmblobsphere.h
new file mode 100644
index 00000000..bb75b856
--- /dev/null
+++ b/kpovmodeler/pmblobsphere.h
@@ -0,0 +1,168 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ -------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBLOBSPHERE_H
+#define PMBLOBSPHERE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmdetailobject.h"
+#include "pmvector.h"
+#include "pmviewstructure.h"
+
+/**
+ * Class for povray sphere.
+ */
+class PMBlobSphere : public PMDetailObject
+{
+ typedef PMDetailObject Base;
+
+public:
+ /**
+ * Create an empty BlobSphere
+ */
+ PMBlobSphere( PMPart* part );
+ /**
+ * Copy constructor
+ */
+ PMBlobSphere( const PMBlobSphere& s );
+ /**
+ * Delete the PMBlobSphere
+ */
+ virtual ~PMBlobSphere( );
+
+ /** */
+ virtual PMObject* copy( ) const { return new PMBlobSphere( *this ); }
+ /** */
+ virtual QString description( ) const;
+
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+ /** */
+ virtual void readAttributes( const PMXMLHelper& h );
+ /**
+ * Returns a new @ref PMBlobSphereEdit
+ */
+ virtual PMDialogEditBase* editWidget( QWidget* parent ) const;
+ /**
+ * Returns the name of the pixmap that is displayed in the tree view
+ * and dialog view
+ */
+ virtual QString pixmap( ) const { return QString( "pmblobsphere" ); }
+
+ /**
+ * Returns the centre of the sphere
+ */
+ PMVector centre( ) const { return m_centre; }
+ /**
+ * Set the centre of the sphere
+ */
+ void setCentre( const PMVector& centre );
+ /**
+ * returns the radius of the sphere
+ */
+ double radius( ) const { return m_radius; }
+ /**
+ * Sets the radius of the sphere
+ */
+ void setRadius( double radius );
+ /**
+ * Returns the components strength
+ */
+ double strength( ) const { return m_strength; }
+ /**
+ * Sets the strength
+ */
+ void setStrength( double s );
+
+ /** */
+ virtual void restoreMemento( PMMemento* s );
+ /** */
+ virtual void controlPoints( PMControlPointList& list );
+ /** */
+ virtual void controlPointsChanged( PMControlPointList& list );
+ /** */
+ virtual bool hasDisplayDetail( ) const { return true; }
+
+ /**
+ * Sets the number of latitutes
+ */
+ static void setUSteps( int u );
+ /**
+ * Sets the number of longitudes
+ */
+ static void setVSteps( int v );
+ /**
+ * Returns the number or latitutes
+ */
+ static int uSteps( ) { return s_uStep; }
+ /**
+ * Returns the number or longitudes
+ */
+ static int vSteps( ) { return s_vStep; }
+ /** */
+ virtual void cleanUp( ) const;
+
+protected:
+ /** */
+ virtual bool isDefault( );
+ /** */
+ virtual void createViewStructure( );
+ /** */
+ virtual PMViewStructure* defaultViewStructure( ) const;
+ /** */
+ virtual int viewStructureParameterKey( ) const { return s_parameterKey + globalDetailKey(); }
+
+private:
+ /**
+ * Creates the lines for the view structure
+ */
+ static void createLines( PMLineArray& lines, int uStep, int vStep );
+ /**
+ * Creates the points for the view structure
+ */
+ static void createPoints( PMPointArray& points, const PMVector& centre,
+ double radius, int uStep, int vStep );
+
+ enum PMBlobSphereMementoID { PMRadiusID, PMCentreID, PMStrengthID };
+ /**
+ * Radius of the sphere
+ */
+ double m_radius;
+ /**
+ * centre of the sphere
+ */
+ PMVector m_centre;
+ double m_strength;
+
+ static PMViewStructure* s_pDefaultViewStructure;
+ static int s_vStep;
+ static int s_uStep;
+ static int s_parameterKey;
+
+ static PMMetaObject* s_pMetaObject;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmblobsphereedit.cpp b/kpovmodeler/pmblobsphereedit.cpp
new file mode 100644
index 00000000..26291248
--- /dev/null
+++ b/kpovmodeler/pmblobsphereedit.cpp
@@ -0,0 +1,102 @@
+/*
+**************************************************************************
+ description
+ -------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#include "pmblobsphereedit.h"
+#include "pmblobsphere.h"
+#include "pmvectoredit.h"
+#include "pmlineedits.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <klocale.h>
+
+PMBlobSphereEdit::PMBlobSphereEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMBlobSphereEdit::createTopWidgets( )
+{
+ Base::createTopWidgets( );
+
+ QHBoxLayout* layout;
+
+ m_pCentre = new PMVectorEdit( "x", "y", "z", this );
+ m_pRadius = new PMFloatEdit( this );
+ m_pStrength = new PMFloatEdit( this );
+
+ layout = new QHBoxLayout( topLayout( ) );
+ layout->addWidget( new QLabel( i18n( "Center:" ), this ) );
+ layout->addWidget( m_pCentre );
+
+ layout = new QHBoxLayout( topLayout( ) );
+ QGridLayout* gl = new QGridLayout( layout, 2, 2 );
+ gl->addWidget( new QLabel( i18n( "Radius:" ), this ), 0, 0 );
+ gl->addWidget( m_pRadius, 0, 1 );
+ gl->addWidget( new QLabel( i18n( "Strength:" ), this ), 1, 0 );
+ gl->addWidget( m_pStrength, 1, 1 );
+ layout->addStretch( 1 );
+
+ connect( m_pCentre, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pRadius, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pStrength, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+}
+
+void PMBlobSphereEdit::displayObject( PMObject* o )
+{
+ if( o->isA( "BlobSphere" ) )
+ {
+ bool readOnly = o->isReadOnly( );
+ m_pDisplayedObject = ( PMBlobSphere* ) o;
+
+ m_pCentre->setVector( m_pDisplayedObject->centre( ) );
+ m_pRadius->setValue( m_pDisplayedObject->radius( ) );
+ m_pStrength->setValue( m_pDisplayedObject->strength( ) );
+
+ m_pCentre->setReadOnly( readOnly );
+ m_pRadius->setReadOnly( readOnly );
+ m_pStrength->setReadOnly( readOnly );
+
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMBlobSphereEdit: Can't display object\n";
+}
+
+void PMBlobSphereEdit::saveContents( )
+{
+ if( m_pDisplayedObject )
+ {
+ Base::saveContents( );
+ m_pDisplayedObject->setCentre( m_pCentre->vector( ) );
+ m_pDisplayedObject->setRadius( m_pRadius->value( ) );
+ m_pDisplayedObject->setStrength( m_pStrength->value( ) );
+ }
+}
+
+bool PMBlobSphereEdit::isDataValid( )
+{
+ if( m_pCentre->isDataValid( ) )
+ if( m_pRadius->isDataValid( ) )
+ if( m_pStrength->isDataValid( ) )
+ return Base::isDataValid( );
+ return false;
+}
+
+
+#include "pmblobsphereedit.moc"
diff --git a/kpovmodeler/pmblobsphereedit.h b/kpovmodeler/pmblobsphereedit.h
new file mode 100644
index 00000000..08f0f1d4
--- /dev/null
+++ b/kpovmodeler/pmblobsphereedit.h
@@ -0,0 +1,63 @@
+/*
+**************************************************************************
+ description
+ -------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#ifndef PMBLOBSPHEREEDIT_H
+#define PMBLOBSPHEREEDIT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmdetailobjectedit.h"
+
+class PMBlobSphere;
+class PMVectorEdit;
+class PMFloatEdit ;
+
+/**
+ * Dialog edit class for @ref PMBlobSphere
+ */
+class PMBlobSphereEdit : public PMDetailObjectEdit
+{
+ Q_OBJECT
+ typedef PMDetailObjectEdit Base;
+public:
+ /**
+ * Creates a PMBlobSphereEdit with parent and name
+ */
+ PMBlobSphereEdit( QWidget* parent, const char* name = 0 );
+
+ /** */
+ virtual void displayObject( PMObject* o );
+
+ /** */
+ virtual bool isDataValid( );
+protected:
+ /** */
+ virtual void createTopWidgets( );
+ /** */
+ virtual void saveContents( );
+
+private:
+ PMBlobSphere* m_pDisplayedObject;
+ PMVectorEdit* m_pCentre;
+ PMFloatEdit* m_pRadius;
+ PMFloatEdit* m_pStrength;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmboundedby.cpp b/kpovmodeler/pmboundedby.cpp
new file mode 100644
index 00000000..127a05f8
--- /dev/null
+++ b/kpovmodeler/pmboundedby.cpp
@@ -0,0 +1,114 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmboundedby.h"
+#include "pmboundedbyedit.h"
+#include "pmxmlhelper.h"
+#include "pmmemento.h"
+
+#include <klocale.h>
+
+PMDefinePropertyClass( PMBoundedBy, PMBoundedByProperty );
+
+PMMetaObject* PMBoundedBy::s_pMetaObject = 0;
+PMObject* createNewBoundedBy( PMPart* part )
+{
+ return new PMBoundedBy( part );
+}
+
+PMBoundedBy::PMBoundedBy( PMPart* part )
+ : Base( part )
+{
+}
+
+PMBoundedBy::~PMBoundedBy( )
+{
+}
+
+PMMetaObject* PMBoundedBy::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "BoundedBy", Base::metaObject( ),
+ createNewBoundedBy );
+ s_pMetaObject->addProperty(
+ new PMBoundedByProperty( "clippedBy", 0, &PMBoundedBy::clippedBy ) );
+ }
+ return s_pMetaObject;
+}
+
+void PMBoundedBy::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+QString PMBoundedBy::description( ) const
+{
+ return i18n( "bounded by" );
+}
+
+bool PMBoundedBy::clippedBy( ) const
+{
+ bool cb = true;
+ PMObject* o = firstChild( );
+
+ for( ; o && cb; o = o->nextSibling( ) )
+ if( o->type( ) != "Comment" )
+ cb = false;
+
+ return cb;
+}
+
+void PMBoundedBy::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ // no extra data at the moment
+ Base::serialize( e, doc );
+}
+
+void PMBoundedBy::readAttributes( const PMXMLHelper& h )
+{
+ // no extra data at the moment
+ Base::readAttributes( h );
+}
+
+PMDialogEditBase* PMBoundedBy::editWidget( QWidget* parent ) const
+{
+ return new PMBoundedByEdit( parent );
+}
+
+void PMBoundedBy::childRemoved( PMObject* o )
+{
+ Base::childRemoved( o );
+
+ // add a dummy change
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMClippedByID, true );
+}
+
+void PMBoundedBy::childAdded( PMObject* o )
+{
+ Base::childAdded( o );
+
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMClippedByID, true );
+}
diff --git a/kpovmodeler/pmboundedby.h b/kpovmodeler/pmboundedby.h
new file mode 100644
index 00000000..22ac3fb4
--- /dev/null
+++ b/kpovmodeler/pmboundedby.h
@@ -0,0 +1,89 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#ifndef PMBOUNDEDBY_H
+#define PMBOUNDEDBY_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmcompositeobject.h"
+
+/**
+ * class for bounded_by povray statements
+ */
+
+class PMBoundedBy : public PMCompositeObject
+{
+ typedef PMCompositeObject Base;
+public:
+ /**
+ * Creates an empty PMBoundedBy
+ */
+ PMBoundedBy( PMPart* part );
+ /**
+ * Deletes the object
+ */
+ ~PMBoundedBy( );
+
+ /** */
+ virtual PMObject* copy( ) const { return new PMBoundedBy( *this ); }
+
+ /** */
+ virtual QString description( ) const;
+
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+ /** */
+ virtual void cleanUp( ) const;
+
+ /** */
+ virtual bool dataChangeOnInsertRemove( ) const { return true; }
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+ /** */
+ virtual void readAttributes( const PMXMLHelper& h );
+
+ /**
+ * Returns a new @ref PMBoundedByEdit
+ */
+ virtual PMDialogEditBase* editWidget( QWidget* parent ) const;
+ /**
+ * Returns the name of the pixmap that is displayed in the tree view
+ * and dialog view
+ */
+ virtual QString pixmap( ) const { return QString( "pmboundedby" ); }
+
+ /** */
+ virtual void childRemoved( PMObject* );
+ /** */
+ virtual void childAdded( PMObject* );
+
+ /**
+ * Returns true if the object contains no child objects (exmbumcept comments)
+ */
+ bool clippedBy( ) const;
+
+private:
+ enum PMBoundedByMementoID { PMClippedByID };
+ static PMMetaObject* s_pMetaObject;
+};
+
+#endif
diff --git a/kpovmodeler/pmboundedbyedit.cpp b/kpovmodeler/pmboundedbyedit.cpp
new file mode 100644
index 00000000..2bf1409e
--- /dev/null
+++ b/kpovmodeler/pmboundedbyedit.cpp
@@ -0,0 +1,65 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmboundedbyedit.h"
+#include "pmboundedby.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <klocale.h>
+
+PMBoundedByEdit::PMBoundedByEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMBoundedByEdit::createTopWidgets( )
+{
+ Base::createTopWidgets( );
+
+ m_pChildLabel = new QLabel( i18n( "No child objects" ), this );
+ topLayout( )->addWidget( m_pChildLabel );
+ m_pClippedByLabel = new QLabel( i18n( "(= clipped by)" ), this );
+ topLayout( )->addWidget( m_pClippedByLabel );
+}
+
+void PMBoundedByEdit::displayObject( PMObject* o )
+{
+ if( o->isA( "BoundedBy" ) )
+ {
+ m_pDisplayedObject = ( PMBoundedBy* ) o;
+
+ if( m_pDisplayedObject->clippedBy( ) )
+ {
+ m_pChildLabel->show( );
+ m_pClippedByLabel->show( );
+ }
+ else
+ {
+ m_pChildLabel->hide( );
+ m_pClippedByLabel->hide( );
+ }
+
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMBoundedByEdit: Can't display object\n";
+}
+
+#include "pmboundedbyedit.moc"
diff --git a/kpovmodeler/pmboundedbyedit.h b/kpovmodeler/pmboundedbyedit.h
new file mode 100644
index 00000000..f4d24a41
--- /dev/null
+++ b/kpovmodeler/pmboundedbyedit.h
@@ -0,0 +1,59 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBOUNDEDBYEDIT_H
+#define PMBOUNDEDBYEDIT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmdialogeditbase.h"
+
+class PMBoundedBy;
+class QLabel;
+
+/**
+ * Dialog edit class for @ref PMBoundedBy
+ */
+class PMBoundedByEdit : public PMDialogEditBase
+{
+ Q_OBJECT
+ typedef PMDialogEditBase Base;
+public:
+ /**
+ * Creates a PMBoundedByEdit with parent and name
+ */
+ PMBoundedByEdit( QWidget* parent, const char* name = 0 );
+
+ /** */
+ virtual void displayObject( PMObject* o );
+
+protected:
+ /** */
+ virtual void createTopWidgets( );
+
+private:
+ PMBoundedBy* m_pDisplayedObject;
+ QLabel* m_pChildLabel;
+ QLabel* m_pClippedByLabel;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmbox.cpp b/kpovmodeler/pmbox.cpp
new file mode 100644
index 00000000..045389bb
--- /dev/null
+++ b/kpovmodeler/pmbox.cpp
@@ -0,0 +1,276 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmbox.h"
+
+#include "pmxmlhelper.h"
+#include "pmboxedit.h"
+#include "pmmemento.h"
+#include "pmviewstructure.h"
+#include "pm3dcontrolpoint.h"
+
+#include <klocale.h>
+
+const double defaultBoxSize = 0.5;
+const PMVector corner1Default = PMVector( -defaultBoxSize, -defaultBoxSize, -defaultBoxSize );
+const PMVector corner2Default = PMVector( defaultBoxSize, defaultBoxSize, defaultBoxSize );
+
+PMDefinePropertyClass( PMBox, PMBoxProperty );
+
+PMViewStructure* PMBox::s_pDefaultViewStructure = 0;
+PMMetaObject* PMBox::s_pMetaObject = 0;
+PMObject* createNewBox( PMPart* part )
+{
+ return new PMBox( part );
+}
+
+PMBox::PMBox( PMPart* part )
+ : Base( part )
+{
+ m_corner1 = corner1Default;
+ m_corner2 = corner2Default;
+}
+
+PMBox::PMBox( const PMBox& b )
+ : Base( b )
+{
+ m_corner1 = b.m_corner1;
+ m_corner2 = b.m_corner2;
+}
+
+PMBox::~PMBox( )
+{
+}
+
+QString PMBox::description( ) const
+{
+ return i18n( "box" );
+}
+
+void PMBox::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ e.setAttribute( "corner_a", m_corner1.serializeXML( ) );
+ e.setAttribute( "corner_b", m_corner2.serializeXML( ) );
+ Base::serialize( e, doc );
+}
+
+void PMBox::readAttributes( const PMXMLHelper& h )
+{
+ m_corner1 = h.vectorAttribute( "corner_a", corner1Default );
+ m_corner2 = h.vectorAttribute( "corner_b", corner2Default );
+ Base::readAttributes( h );
+}
+
+PMMetaObject* PMBox::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "Box", Base::metaObject( ),
+ createNewBox );
+ s_pMetaObject->addProperty(
+ new PMBoxProperty( "corner1", &PMBox::setCorner1, &PMBox::corner1 ) );
+ s_pMetaObject->addProperty(
+ new PMBoxProperty( "corner2", &PMBox::setCorner2, &PMBox::corner2 ) );
+ }
+ return s_pMetaObject;
+}
+
+void PMBox::setCorner1( const PMVector& p )
+{
+ if( p != m_corner1 )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMCorner1ID, m_corner1 );
+ m_corner1 = p;
+ m_corner1.resize( 3 );
+ setViewStructureChanged( );
+ }
+}
+
+void PMBox::setCorner2( const PMVector& p )
+{
+ if( p != m_corner2 )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMCorner2ID, m_corner2 );
+ m_corner2 = p;
+ m_corner2.resize( 3 );
+ setViewStructureChanged( );
+ }
+}
+
+PMDialogEditBase* PMBox::editWidget( QWidget* parent ) const
+{
+ return new PMBoxEdit( parent );
+}
+
+void PMBox::restoreMemento( PMMemento* s )
+{
+ PMMementoDataIterator it( s );
+ PMMementoData* data;
+
+ for( ; it.current( ); ++it )
+ {
+ data = it.current( );
+ if( data->objectType( ) == s_pMetaObject )
+ {
+ switch( data->valueID( ) )
+ {
+ case PMCorner1ID:
+ setCorner1( data->vectorData( ) );
+ break;
+ case PMCorner2ID:
+ setCorner2( data->vectorData( ) );
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMBox::restoreMemento\n";
+ break;
+ }
+ }
+ }
+ Base::restoreMemento( s );
+}
+
+
+bool PMBox::isDefault( )
+{
+ if( ( m_corner1 == corner1Default ) && ( m_corner2 == corner2Default ) )
+ return true;
+ return false;
+}
+
+void PMBox::createViewStructure( )
+{
+ if( !m_pViewStructure )
+ {
+ m_pViewStructure = new PMViewStructure( defaultViewStructure( ) );
+ m_pViewStructure->points( ).detach( );
+ }
+
+ PMPointArray& points = m_pViewStructure->points( );
+
+ points[0][0] = m_corner1[0];
+ points[0][1] = m_corner1[1];
+ points[0][2] = m_corner1[2];
+
+ points[1][0] = m_corner2[0];
+ points[1][1] = m_corner1[1];
+ points[1][2] = m_corner1[2];
+
+ points[2][0] = m_corner2[0];
+ points[2][1] = m_corner1[1];
+ points[2][2] = m_corner2[2];
+
+ points[3][0] = m_corner1[0];
+ points[3][1] = m_corner1[1];
+ points[3][2] = m_corner2[2];
+
+ points[4][0] = m_corner1[0];
+ points[4][1] = m_corner2[1];
+ points[4][2] = m_corner1[2];
+
+ points[5][0] = m_corner2[0];
+ points[5][1] = m_corner2[1];
+ points[5][2] = m_corner1[2];
+
+ points[6][0] = m_corner2[0];
+ points[6][1] = m_corner2[1];
+ points[6][2] = m_corner2[2];
+
+ points[7][0] = m_corner1[0];
+ points[7][1] = m_corner2[1];
+ points[7][2] = m_corner2[2];
+}
+
+PMViewStructure* PMBox::defaultViewStructure( ) const
+{
+ if( !s_pDefaultViewStructure )
+ {
+ s_pDefaultViewStructure = new PMViewStructure( 8, 12 );
+ PMPointArray& points = s_pDefaultViewStructure->points( );
+ PMLineArray& lines = s_pDefaultViewStructure->lines( );
+
+ points[0] = PMPoint( -defaultBoxSize, -defaultBoxSize, -defaultBoxSize );
+ points[1] = PMPoint( defaultBoxSize, -defaultBoxSize, -defaultBoxSize );
+ points[2] = PMPoint( defaultBoxSize, -defaultBoxSize, defaultBoxSize );
+ points[3] = PMPoint( -defaultBoxSize, -defaultBoxSize, defaultBoxSize );
+ points[4] = PMPoint( -defaultBoxSize, defaultBoxSize, -defaultBoxSize );
+ points[5] = PMPoint( defaultBoxSize, defaultBoxSize, -defaultBoxSize );
+ points[6] = PMPoint( defaultBoxSize, defaultBoxSize, defaultBoxSize );
+ points[7] = PMPoint( -defaultBoxSize, defaultBoxSize, defaultBoxSize );
+
+ lines[ 0] = PMLine( 0, 1 );
+ lines[ 1] = PMLine( 0, 3 );
+ lines[ 2] = PMLine( 0, 4 );
+ lines[ 3] = PMLine( 1, 2 );
+ lines[ 4] = PMLine( 1, 5 );
+ lines[ 5] = PMLine( 2, 3 );
+ lines[ 6] = PMLine( 2, 6 );
+ lines[ 7] = PMLine( 3, 7 );
+ lines[ 8] = PMLine( 4, 5 );
+ lines[ 9] = PMLine( 4, 7 );
+ lines[10] = PMLine( 5, 6 );
+ lines[11] = PMLine( 6, 7 );
+ }
+ return s_pDefaultViewStructure;
+}
+
+void PMBox::controlPoints( PMControlPointList& list )
+{
+ list.append( new PM3DControlPoint( m_corner1, PMCorner1ID,
+ i18n( "Corner 1" ) ) );
+ list.append( new PM3DControlPoint( m_corner2, PMCorner2ID,
+ i18n( "Corner 2" ) ) );
+}
+
+void PMBox::controlPointsChanged( PMControlPointList& list )
+{
+ PMControlPoint* p;
+
+ for( p = list.first( ); p; p = list.next( ) )
+ {
+ if( p->changed( ) )
+ {
+ switch( p->id( ) )
+ {
+ case PMCorner1ID:
+ setCorner1( ( ( PM3DControlPoint* ) p )->point( ) );
+ break;
+ case PMCorner2ID:
+ setCorner2( ( ( PM3DControlPoint* ) p )->point( ) );
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMBox::controlPointsChanged\n";
+ break;
+ }
+ }
+ }
+}
+
+void PMBox::cleanUp( ) const
+{
+ if( s_pDefaultViewStructure )
+ delete s_pDefaultViewStructure;
+ s_pDefaultViewStructure = 0;
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
diff --git a/kpovmodeler/pmbox.h b/kpovmodeler/pmbox.h
new file mode 100644
index 00000000..d6627ffe
--- /dev/null
+++ b/kpovmodeler/pmbox.h
@@ -0,0 +1,123 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2002 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBOX_H
+#define PMBOX_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmsolidobject.h"
+#include "pmvector.h"
+
+class PMViewStructure;
+
+/**
+ * Class for povray boxes.
+ */
+
+class PMBox : public PMSolidObject
+{
+ typedef PMSolidObject Base;
+public:
+ /**
+ * Creates an empty PMBox
+ */
+ PMBox( PMPart* part );
+ /**
+ * Copy constructor
+ */
+ PMBox( const PMBox& b );
+ /**
+ * deletes the PMBox
+ */
+ virtual ~PMBox( );
+
+ /** */
+ virtual PMObject* copy( ) const { return new PMBox( *this ); }
+ /** */
+ virtual QString description( ) const;
+
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+ /** */
+ virtual void readAttributes( const PMXMLHelper& h );
+ /**
+ * Returns a new @ref PMBoxEdit
+ */
+ virtual PMDialogEditBase* editWidget( QWidget* parent ) const;
+ /**
+ * Returns the name of the pixmap that is displayed in the tree view
+ * and dialog view
+ */
+ virtual QString pixmap( ) const { return QString( "pmbox" ); }
+
+ /**
+ * Returns Corner_1
+ */
+ PMVector corner1( ) const { return m_corner1; }
+ /**
+ * Sets Corner_1
+ */
+ void setCorner1( const PMVector& p );
+ /**
+ * Returns Corner_2
+ */
+ PMVector corner2( ) const { return m_corner2; }
+ /**
+ * Sets Corner_2
+ */
+ void setCorner2( const PMVector& p );
+
+ /** */
+ virtual void restoreMemento( PMMemento* s );
+ /** */
+ virtual void controlPoints( PMControlPointList& list );
+ /** */
+ virtual void controlPointsChanged( PMControlPointList& list );
+ /** */
+ virtual void cleanUp( ) const;
+
+protected:
+ /** */
+ virtual bool isDefault( );
+ /** */
+ virtual void createViewStructure( );
+ /** */
+ virtual PMViewStructure* defaultViewStructure( ) const;
+
+private:
+ /**
+ * IDs for @ref PMMementoData
+ */
+ enum PMBoxMementoID { PMCorner1ID, PMCorner2ID };
+ PMVector m_corner1, m_corner2;
+
+ /**
+ * The default view structure. It can be shared between boxes
+ */
+ static PMViewStructure* s_pDefaultViewStructure;
+ static PMMetaObject* s_pMetaObject;
+};
+
+#endif
diff --git a/kpovmodeler/pmboxedit.cpp b/kpovmodeler/pmboxedit.cpp
new file mode 100644
index 00000000..2db1eb79
--- /dev/null
+++ b/kpovmodeler/pmboxedit.cpp
@@ -0,0 +1,86 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmboxedit.h"
+#include "pmbox.h"
+#include "pmvectoredit.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <klocale.h>
+
+PMBoxEdit::PMBoxEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMBoxEdit::createTopWidgets( )
+{
+ Base::createTopWidgets( );
+
+ m_pCorner1 = new PMVectorEdit( "x", "y", "z", this );
+ m_pCorner2 = new PMVectorEdit( "x", "y", "z", this );
+
+ QGridLayout* gl = new QGridLayout( topLayout( ), 2, 2 );
+ gl->addWidget( new QLabel( i18n( "Corner 1:" ), this ), 0, 0 );
+ gl->addWidget( m_pCorner1, 0, 1 );
+ gl->addWidget( new QLabel( i18n( "Corner 2:" ), this ), 1, 0 );
+ gl->addWidget( m_pCorner2, 1, 1 );
+
+ connect( m_pCorner1, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pCorner2, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+}
+
+void PMBoxEdit::displayObject( PMObject* o )
+{
+ if( o->isA( "Box" ) )
+ {
+ bool readOnly = o->isReadOnly( );
+ m_pDisplayedObject = ( PMBox* ) o;
+
+ m_pCorner1->setVector( m_pDisplayedObject->corner1( ) );
+ m_pCorner2->setVector( m_pDisplayedObject->corner2( ) );
+
+ m_pCorner1->setReadOnly( readOnly );
+ m_pCorner2->setReadOnly( readOnly );
+
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMBoxEdit: Can't display object\n";
+}
+
+void PMBoxEdit::saveContents( )
+{
+ if( m_pDisplayedObject )
+ {
+ Base::saveContents( );
+ m_pDisplayedObject->setCorner1( m_pCorner1->vector( ) );
+ m_pDisplayedObject->setCorner2( m_pCorner2->vector( ) );
+ }
+}
+
+bool PMBoxEdit::isDataValid( )
+{
+ if( m_pCorner1->isDataValid( ) )
+ if( m_pCorner2->isDataValid( ) )
+ return Base::isDataValid( );
+ return false;
+}
+#include "pmboxedit.moc"
diff --git a/kpovmodeler/pmboxedit.h b/kpovmodeler/pmboxedit.h
new file mode 100644
index 00000000..4f87ceac
--- /dev/null
+++ b/kpovmodeler/pmboxedit.h
@@ -0,0 +1,63 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#ifndef PMBOXEDIT_H
+#define PMBOXEDIT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmsolidobjectedit.h"
+
+class PMBox;
+class PMVectorEdit;
+
+/**
+ * Dialog edit class for @ref PMBox
+ */
+class PMBoxEdit : public PMSolidObjectEdit
+{
+ Q_OBJECT
+ typedef PMSolidObjectEdit Base;
+public:
+ /**
+ * Creates a PMBoxEdit with parent and name
+ */
+ PMBoxEdit( QWidget* parent, const char* name = 0 );
+
+ /** */
+ virtual void displayObject( PMObject* o );
+
+ /** */
+ virtual bool isDataValid( );
+protected:
+ /** */
+ virtual void createTopWidgets( );
+ /** */
+ virtual void saveContents( );
+
+private:
+ PMBox* m_pDisplayedObject;
+ PMVectorEdit* m_pCorner1;
+ PMVectorEdit* m_pCorner2;
+};
+
+
+#endif
diff --git a/kpovmodeler/pmbumpmap.cpp b/kpovmodeler/pmbumpmap.cpp
new file mode 100644
index 00000000..e9549bd9
--- /dev/null
+++ b/kpovmodeler/pmbumpmap.cpp
@@ -0,0 +1,384 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Luis Passos Carvalho
+ email : lpassos@mail.telepac.pt
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+
+#include "pmbumpmapedit.h"
+#include "pmbumpmap.h"
+#include "pmpalettevalue.h"
+#include "pmpalettevaluememento.h"
+
+#include "pmxmlhelper.h"
+#include "pmcompositeobject.h"
+#include "pmmemento.h"
+#include "pmenumproperty.h"
+
+#include <klocale.h>
+
+const PMBumpMap::PMBitmapType bitmapTypeDefault = PMBumpMap::BitmapSys;
+const char *const bitmapFileDefault = 0;
+const bool enableFilterAllDefault = false;
+const bool enableTransmitAllDefault = false;
+const double filterAllDefault = 0.0;
+const double transmitAllDefault = 0.0;
+const bool onceDefault = false;
+const PMBumpMap::PMMapType mapTypeDefault = PMBumpMap::MapPlanar;
+const PMBumpMap::PMInterpolateType interpolateTypeDefault = PMBumpMap::InterpolateNone;
+const bool useIndexDefault = false;
+const double bumpSizeDefault = 0.0;
+
+PMDefinePropertyClass( PMBumpMap, PMBumpMapProperty );
+PMDefineEnumPropertyClass( PMBumpMap, PMBumpMap::PMBitmapType,
+ PMBitmapTypeProperty );
+PMDefineEnumPropertyClass( PMBumpMap, PMBumpMap::PMInterpolateType,
+ PMInterpolateTypeProperty );
+PMDefineEnumPropertyClass( PMBumpMap, PMBumpMap::PMMapType,
+ PMMapTypeProperty );
+
+PMMetaObject* PMBumpMap::s_pMetaObject = 0;
+PMObject* createNewBumpMap( PMPart* part )
+{
+ return new PMBumpMap( part );
+}
+
+PMBumpMap::PMBumpMap( PMPart* part )
+ : Base( part )
+{
+ m_bitmapType = bitmapTypeDefault;
+ m_bitmapFile = bitmapFileDefault;
+ m_once = onceDefault;
+ m_mapType = mapTypeDefault;
+ m_interpolateType = interpolateTypeDefault;
+ m_useIndex = useIndexDefault;
+ m_bumpSize = bumpSizeDefault;
+}
+
+PMBumpMap::PMBumpMap( const PMBumpMap& m )
+ : Base( m )
+{
+ m_bitmapType = m.m_bitmapType;
+ m_bitmapFile = m.m_bitmapFile;
+ m_once = m.m_once;
+ m_mapType = m.m_mapType;
+ m_interpolateType = m.m_interpolateType;
+ m_useIndex = m.m_useIndex;
+ m_bumpSize = m.m_bumpSize;
+}
+
+PMBumpMap::~PMBumpMap( )
+{
+}
+
+void PMBumpMap::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ switch( m_bitmapType )
+ {
+ case BitmapGif:
+ e.setAttribute( "bitmap_type", "gif" );
+ break;
+ case BitmapTga:
+ e.setAttribute( "bitmap_type", "tga" );
+ break;
+ case BitmapIff:
+ e.setAttribute( "bitmap_type", "iff" );
+ break;
+ case BitmapPpm:
+ e.setAttribute( "bitmap_type", "ppm" );
+ break;
+ case BitmapPgm:
+ e.setAttribute( "bitmap_type", "pgm" );
+ break;
+ case BitmapPng:
+ e.setAttribute( "bitmap_type", "png" );
+ break;
+ case BitmapJpeg:
+ e.setAttribute( "bitmap_type", "jpeg" );
+ break;
+ case BitmapTiff:
+ e.setAttribute( "bitmap_type", "tiff" );
+ break;
+ case BitmapSys:
+ e.setAttribute( "bitmap_type", "sys" );
+ break;
+ }
+ e.setAttribute( "file_name", m_bitmapFile );
+ e.setAttribute( "once", m_once );
+ switch( m_mapType )
+ {
+ case MapPlanar:
+ e.setAttribute( "map_type", "planar" );
+ break;
+ case MapSpherical:
+ e.setAttribute( "map_type", "spherical" );
+ break;
+ case MapCylindrical:
+ e.setAttribute( "map_type", "cylindrical" );
+ break;
+ case MapToroidal:
+ e.setAttribute( "map_type", "toroidal" );
+ break;
+ }
+ switch( m_interpolateType )
+ {
+ case InterpolateNone:
+ e.setAttribute( "interpolate", "none" );
+ break;
+ case InterpolateBilinear:
+ e.setAttribute( "interpolate", "bilinear" );
+ break;
+ case InterpolateNormalized:
+ e.setAttribute( "interpolate", "normalized" );
+ break;
+ }
+ e.setAttribute( "use_index", m_useIndex );
+ e.setAttribute( "bump_size", m_bumpSize );
+
+ Base::serialize( e, doc );
+}
+
+void PMBumpMap::readAttributes( const PMXMLHelper& h )
+{
+ QString str;
+
+ str = h.stringAttribute( "bitmap_type", "sys" );
+ if( str == "gif" )
+ m_bitmapType = BitmapGif;
+ else if( str == "tga" )
+ m_bitmapType = BitmapTga;
+ else if( str == "iff" )
+ m_bitmapType = BitmapIff;
+ else if( str == "ppm" )
+ m_bitmapType = BitmapPpm;
+ else if( str == "pgm" )
+ m_bitmapType = BitmapPgm;
+ else if( str == "png" )
+ m_bitmapType = BitmapPng;
+ else if( str == "jpeg" )
+ m_bitmapType = BitmapJpeg;
+ else if( str == "tiff" )
+ m_bitmapType = BitmapTiff;
+ else if( str == "sys" )
+ m_bitmapType = BitmapSys;
+
+ m_bitmapFile = h.stringAttribute( "file_name", bitmapFileDefault );
+ m_once = h.boolAttribute( "once", onceDefault );
+
+ str = h.stringAttribute( "map_type", "planar" );
+ if( str == "planar" )
+ m_mapType = MapPlanar;
+ else if( str == "spherical" )
+ m_mapType = MapSpherical;
+ else if( str == "cylindrical" )
+ m_mapType = MapCylindrical;
+ else if( str == "toroidal" )
+ m_mapType = MapToroidal;