1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svx.hxx" 26 27 #include <svx/sdr/contact/viewcontactofsdrcircobj.hxx> 28 #include <svx/svdocirc.hxx> 29 #include <svx/sdr/primitive2d/sdrattributecreator.hxx> 30 #include <svx/sdr/primitive2d/sdrellipseprimitive2d.hxx> 31 #include <svl/itemset.hxx> 32 #include <svx/sxciaitm.hxx> 33 #include <basegfx/matrix/b2dhommatrixtools.hxx> 34 35 ////////////////////////////////////////////////////////////////////////////// 36 37 namespace sdr 38 { 39 namespace contact 40 { ViewContactOfSdrCircObj(SdrCircObj & rCircObj)41 ViewContactOfSdrCircObj::ViewContactOfSdrCircObj(SdrCircObj& rCircObj) 42 : ViewContactOfSdrRectObj(rCircObj) 43 { 44 } 45 ~ViewContactOfSdrCircObj()46 ViewContactOfSdrCircObj::~ViewContactOfSdrCircObj() 47 { 48 } 49 createViewIndependentPrimitive2DSequence() const50 drawinglayer::primitive2d::Primitive2DSequence ViewContactOfSdrCircObj::createViewIndependentPrimitive2DSequence() const 51 { 52 const SfxItemSet& rItemSet = GetCircObj().GetMergedItemSet(); 53 const drawinglayer::attribute::SdrLineFillShadowTextAttribute aAttribute( 54 drawinglayer::primitive2d::createNewSdrLineFillShadowTextAttribute( 55 rItemSet, 56 GetCircObj().getText(0), 57 false)); 58 59 // take unrotated snap rect (direct model data) for position and size 60 const Rectangle& rRectangle = GetCircObj().GetGeoRect(); 61 const basegfx::B2DRange aObjectRange( 62 rRectangle.Left(), rRectangle.Top(), 63 rRectangle.Right(), rRectangle.Bottom()); 64 const GeoStat& rGeoStat(GetCircObj().GetGeoStat()); 65 66 // fill object matrix 67 const basegfx::B2DHomMatrix aObjectMatrix( 68 basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix( 69 aObjectRange.getWidth(), aObjectRange.getHeight(), 70 rGeoStat.nShearWink ? tan((36000 - rGeoStat.nShearWink) * F_PI18000) : 0.0, 71 rGeoStat.nDrehWink ? (36000 - rGeoStat.nDrehWink) * F_PI18000 : 0.0, 72 aObjectRange.getMinX(), aObjectRange.getMinY())); 73 74 // create primitive data 75 const sal_uInt16 nIdentifier(GetCircObj().GetObjIdentifier()); 76 77 // always create primitives to allow the decomposition of SdrEllipsePrimitive2D 78 // or SdrEllipseSegmentPrimitive2D to create needed invisible elements for HitTest 79 // and/or BoundRect 80 if(OBJ_CIRC == nIdentifier) 81 { 82 const drawinglayer::primitive2d::Primitive2DReference xReference( 83 new drawinglayer::primitive2d::SdrEllipsePrimitive2D( 84 aObjectMatrix, 85 aAttribute)); 86 87 return drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); 88 } 89 else 90 { 91 const sal_Int32 nNewStart(((SdrCircStartAngleItem&)rItemSet.Get(SDRATTR_CIRCSTARTANGLE)).GetValue()); 92 const sal_Int32 nNewEnd(((SdrCircEndAngleItem&)rItemSet.Get(SDRATTR_CIRCENDANGLE)).GetValue()); 93 const double fStart(((36000 - nNewEnd) % 36000) * F_PI18000); 94 const double fEnd(((36000 - nNewStart) % 36000) * F_PI18000); 95 const bool bCloseSegment(OBJ_CARC != nIdentifier); 96 const bool bCloseUsingCenter(OBJ_SECT == nIdentifier); 97 98 const drawinglayer::primitive2d::Primitive2DReference xReference( 99 new drawinglayer::primitive2d::SdrEllipseSegmentPrimitive2D( 100 aObjectMatrix, 101 aAttribute, 102 fStart, 103 fEnd, 104 bCloseSegment, 105 bCloseUsingCenter)); 106 107 return drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); 108 } 109 } 110 } // end of namespace contact 111 } // end of namespace sdr 112 113 ////////////////////////////////////////////////////////////////////////////// 114 // eof 115