[Uml-user] Relationshipd on ERDs
    graeme foster 
    foster.graeme at gmail.com
       
    Sat Jun 18 08:26:04 UTC 2005
    
    
  
Hi,
The relationships on ERDs are not drawn correctly if the entities are
above each other. Here is the fix for this:
class associationWidget
Made getWidgetRegion public
changed the code from:
AssociationWidget::Region
AssociationWidget::getWidgetRegion(AssociationWidget * widget) const {
  if(widget -> getWidget(A) == m_role[A].m_pWidget)
      return m_role[A].m_WidgetRegion;
  if(widget -> getWidget(B) == m_role[B].m_pWidget)
      return m_role[B].m_WidgetRegion;
  return Error;
}
to:
AssociationWidget::Region
AssociationWidget::getWidgetRegion(AssociationWidget * widget) const {
  if(widget == (AssociationWidget *)m_role[A].m_pWidget)
      return m_role[A].m_WidgetRegion;
  if(widget == (AssociationWidget *)m_role[B].m_pWidget)
      return m_role[B].m_WidgetRegion;
  return Error;
}
I don't think this method was being used anywhere so I believe that this
change is alright.
class linepath
included
#include "associationwidget.h"
#include "umlrole.h"
changed updateHead():
added this declaration:
  // get the region for which RoleB connects to the entity. (RoleB is
the crows foot)
  AssociationWidget * roleB = (AssociationWidget*)
m_pAssociation->getWidget(Uml::B);
  const AssociationWidget::Region joinRegion =
m_pAssociation->getWidgetRegion(roleB);
and changed the following code around the FIXME comment
      case Uml::at_Relationship:
          if (count < 2) {
              return;
          }
          //FIXME fix for when association is on top/bottom of widget
          if (joinRegion == AssociationWidget::North || joinRegion ==
AssociationWidget::South)
          {
              line = m_HeadList.at( 0 );
              line->setPoints( m_PointArray[2].x(), m_PointArray[2].y(),
                       m_PointArray[0].x()-8, m_PointArray[0].y() );
              line = m_HeadList.at( 1 );
              line->setPoints( m_PointArray[2].x(), m_PointArray[2].y(),
                       m_PointArray[0].x()+8, m_PointArray[0].y() );
          }
          else
          {
              line = m_HeadList.at( 0 );
              line->setPoints( m_PointArray[2].x(), m_PointArray[2].y(),
                       m_PointArray[0].x(), m_PointArray[0].y()-8 );
              line = m_HeadList.at( 1 );
              line->setPoints( m_PointArray[2].x(), m_PointArray[2].y(),
                       m_PointArray[0].x(), m_PointArray[0].y()+8 );
          }
          break;
I can send you the changed files if you want.
hope this helps,
graeme
    
    
More information about the umbrello
mailing list