1f6e50924SAndrew Rist /************************************************************** 2*cd1c183bSmseidel * 3f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file 5f6e50924SAndrew Rist * distributed with this work for additional information 6f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the 8f6e50924SAndrew Rist * "License"); you may not use this file except in compliance 9f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at 10*cd1c183bSmseidel * 11f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*cd1c183bSmseidel * 13f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing, 14f6e50924SAndrew Rist * software distributed under the License is distributed on an 15f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16f6e50924SAndrew Rist * KIND, either express or implied. See the License for the 17f6e50924SAndrew Rist * specific language governing permissions and limitations 18f6e50924SAndrew Rist * under the License. 19*cd1c183bSmseidel * 20f6e50924SAndrew Rist *************************************************************/ 21f6e50924SAndrew Rist 22f6e50924SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svx.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <svx/sdr/contact/viewcontactofe3dextrude.hxx> 28cdf0e10cSrcweir #include <svx/extrud3d.hxx> 29cdf0e10cSrcweir #include <drawinglayer/primitive3d/sdrextrudeprimitive3d.hxx> 30cdf0e10cSrcweir #include <svx/sdr/primitive2d/sdrattributecreator.hxx> 31cdf0e10cSrcweir #include <svx/sdr/primitive3d/sdrattributecreator3d.hxx> 32cdf0e10cSrcweir #include <basegfx/polygon/b2dpolypolygontools.hxx> 33cdf0e10cSrcweir 34cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 35cdf0e10cSrcweir 36cdf0e10cSrcweir namespace sdr 37cdf0e10cSrcweir { 38cdf0e10cSrcweir namespace contact 39cdf0e10cSrcweir { ViewContactOfE3dExtrude(E3dExtrudeObj & rExtrude)40cdf0e10cSrcweir ViewContactOfE3dExtrude::ViewContactOfE3dExtrude(E3dExtrudeObj& rExtrude) 41cdf0e10cSrcweir : ViewContactOfE3d(rExtrude) 42cdf0e10cSrcweir { 43cdf0e10cSrcweir } 44cdf0e10cSrcweir ~ViewContactOfE3dExtrude()45cdf0e10cSrcweir ViewContactOfE3dExtrude::~ViewContactOfE3dExtrude() 46cdf0e10cSrcweir { 47cdf0e10cSrcweir } 48cdf0e10cSrcweir createViewIndependentPrimitive3DSequence() const49cdf0e10cSrcweir drawinglayer::primitive3d::Primitive3DSequence ViewContactOfE3dExtrude::createViewIndependentPrimitive3DSequence() const 50cdf0e10cSrcweir { 51cdf0e10cSrcweir drawinglayer::primitive3d::Primitive3DSequence xRetval; 52cdf0e10cSrcweir const SfxItemSet& rItemSet = GetE3dExtrudeObj().GetMergedItemSet(); 53cdf0e10cSrcweir const drawinglayer::attribute::SdrLineFillShadowAttribute3D aAttribute( 54cdf0e10cSrcweir drawinglayer::primitive2d::createNewSdrLineFillShadowAttribute(rItemSet, false)); 55cdf0e10cSrcweir 56cdf0e10cSrcweir // get extrude geometry 57cdf0e10cSrcweir const basegfx::B2DPolyPolygon aPolyPolygon(GetE3dExtrudeObj().GetExtrudePolygon()); 58cdf0e10cSrcweir 59cdf0e10cSrcweir // get 3D Object Attributes 60cdf0e10cSrcweir drawinglayer::attribute::Sdr3DObjectAttribute* pSdr3DObjectAttribute = drawinglayer::primitive2d::createNewSdr3DObjectAttribute(rItemSet); 61cdf0e10cSrcweir 62cdf0e10cSrcweir // calculate texture size; use size of top/bottom cap to get a perfect mapping 63cdf0e10cSrcweir // for the caps. The in-between geometry will get a stretched size with a 64cdf0e10cSrcweir // relative factor size of caps to extrude depth 65cdf0e10cSrcweir const basegfx::B2DRange aRange(basegfx::tools::getRange(aPolyPolygon)); 66cdf0e10cSrcweir const basegfx::B2DVector aTextureSize(aRange.getWidth(), aRange.getHeight()); 67cdf0e10cSrcweir 68cdf0e10cSrcweir // get more data 69cdf0e10cSrcweir const double fDepth((double)GetE3dExtrudeObj().GetExtrudeDepth()); 70cdf0e10cSrcweir const double fDiagonal((double)GetE3dExtrudeObj().GetPercentDiagonal() / 100.0); 71cdf0e10cSrcweir const double fBackScale((double)GetE3dExtrudeObj().GetPercentBackScale() / 100.0); 72cdf0e10cSrcweir const bool bSmoothNormals(GetE3dExtrudeObj().GetSmoothNormals()); // Plane itself 73cdf0e10cSrcweir const bool bSmoothLids(GetE3dExtrudeObj().GetSmoothLids()); // Front/back 74cdf0e10cSrcweir const bool bCharacterMode(GetE3dExtrudeObj().GetCharacterMode()); 75cdf0e10cSrcweir const bool bCloseFront(GetE3dExtrudeObj().GetCloseFront()); 76cdf0e10cSrcweir const bool bCloseBack(GetE3dExtrudeObj().GetCloseBack()); 77cdf0e10cSrcweir 78cdf0e10cSrcweir // create primitive and add 79cdf0e10cSrcweir const basegfx::B3DHomMatrix aWorldTransform; 80cdf0e10cSrcweir const drawinglayer::primitive3d::Primitive3DReference xReference( 81cdf0e10cSrcweir new drawinglayer::primitive3d::SdrExtrudePrimitive3D( 82cdf0e10cSrcweir aWorldTransform, aTextureSize, aAttribute, *pSdr3DObjectAttribute, 83cdf0e10cSrcweir aPolyPolygon, fDepth, fDiagonal, fBackScale, bSmoothNormals, true, bSmoothLids, 84cdf0e10cSrcweir bCharacterMode, bCloseFront, bCloseBack)); 85*cd1c183bSmseidel xRetval = drawinglayer::primitive3d::Primitive3DSequence(&xReference, 1); 86cdf0e10cSrcweir 87cdf0e10cSrcweir // delete 3D Object Attributes 88cdf0e10cSrcweir delete pSdr3DObjectAttribute; 89cdf0e10cSrcweir 90cdf0e10cSrcweir return xRetval; 91cdf0e10cSrcweir } 92cdf0e10cSrcweir } // end of namespace contact 93cdf0e10cSrcweir } // end of namespace sdr 94cdf0e10cSrcweir 95cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 96cdf0e10cSrcweir // eof 97