* ./hurricane/src/hurricane :
- Change: In Technology::getViaBetween(Layer*,Layer*) if the two layers are identicals, return the layer instead of NULL (mostly for mono- metallic VIAs). * ./hurricane/src/hviewer : - Bug: In CellWidget::redrawSelection(), correct calculation of the selected Instances abutment box. We must apply the occurrence path transformation to the instance transformation and not the other way around. - Bug: In SelectorLess(), Instance must be *inferior* to Components as they are drawed after in CellWidget::redrawSelection().
This commit is contained in:
parent
54219843d6
commit
cc98bd541d
|
@ -240,6 +240,8 @@ Interval& Interval::translate(const DbU::Unit& dv)
|
|||
string Interval::_getString() const
|
||||
// ********************************
|
||||
{
|
||||
if ( isEmpty() )
|
||||
return "<" + _TName("Interval") + " (empty) " + DbU::getValueString(_vMin) + " " + DbU::getValueString(_vMax) + ">";
|
||||
return "<" + _TName("Interval") + " " + DbU::getValueString(_vMin) + " " + DbU::getValueString(_vMax) + ">";
|
||||
}
|
||||
|
||||
|
|
|
@ -261,6 +261,7 @@ ViaLayers Technology::getViaLayers() const
|
|||
Layer* Technology::getViaBetween ( const Layer* metal1, const Layer* metal2 ) const
|
||||
{
|
||||
if ( !metal1 || !metal2 ) return NULL;
|
||||
if ( metal1 == metal2 ) return const_cast<Layer*>(metal1);
|
||||
if ( metal1->above(metal2) ) swap ( metal1, metal2 );
|
||||
|
||||
Layer* cutLayer = getCutBelow ( metal2 );
|
||||
|
|
|
@ -744,9 +744,7 @@ namespace Hurricane {
|
|||
|
||||
|
||||
bool CellWidget::DrawingQuery::hasMasterCellCallback () const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
{ return true; }
|
||||
|
||||
|
||||
void CellWidget::DrawingQuery::masterCellCallback ()
|
||||
|
@ -1469,22 +1467,13 @@ namespace Hurricane {
|
|||
iselector = _selectors.begin();
|
||||
for ( ; iselector != _selectors.end() ; iselector++ ) {
|
||||
Occurrence occurrence = (*iselector)->getOccurrence();
|
||||
Transformation transformation = occurrence.getPath().getTransformation();
|
||||
|
||||
Instance* instance = dynamic_cast<Instance*>(occurrence.getEntity());
|
||||
if ( instance ) {
|
||||
_drawingPlanes.setPen ( Graphics::getPen ("boundaries",getDarkening()) );
|
||||
_drawingPlanes.setBrush ( Graphics::getBrush("boundaries",getDarkening()) );
|
||||
|
||||
_drawingQuery.drawMasterCell ( instance->getMasterCell(), instance->getTransformation().getTransformation(transformation) );
|
||||
continue;
|
||||
}
|
||||
|
||||
Component* component = dynamic_cast<Component*>(occurrence.getEntity());
|
||||
|
||||
if ( !component ) break;
|
||||
if ( !component->getLayer() ) continue;
|
||||
if ( !component->getLayer()->contains(*basicLayer) ) continue;
|
||||
|
||||
Transformation transformation = occurrence.getPath().getTransformation();
|
||||
_drawingQuery.drawGo ( dynamic_cast<Go*>(occurrence.getEntity())
|
||||
, *basicLayer
|
||||
, redrawBox
|
||||
|
@ -1493,27 +1482,40 @@ namespace Hurricane {
|
|||
}
|
||||
}
|
||||
|
||||
_drawingPlanes.setPen ( Graphics::getPen ("boundaries") );
|
||||
_drawingPlanes.setBrush ( Graphics::getBrush("boundaries") );
|
||||
|
||||
for ( ; iselector != _selectors.end() ; iselector++ ) {
|
||||
Occurrence occurrence = (*iselector)->getOccurrence();
|
||||
Instance* instance = dynamic_cast<Instance*>(occurrence.getEntity());
|
||||
if ( instance ) {
|
||||
Transformation transformation
|
||||
= occurrence.getPath().getTransformation().getTransformation(instance->getTransformation());
|
||||
_drawingQuery.drawMasterCell ( instance->getMasterCell(), transformation );
|
||||
}
|
||||
}
|
||||
|
||||
_drawingPlanes.setPen ( Graphics::getPen ("rubber") );
|
||||
_drawingPlanes.setBrush ( Graphics::getBrush("rubber") );
|
||||
|
||||
for ( ; iselector != _selectors.end() ; iselector++ ) {
|
||||
Occurrence occurrence = (*iselector)->getOccurrence();
|
||||
Transformation transformation = occurrence.getPath().getTransformation();
|
||||
|
||||
Rubber* rubber = dynamic_cast<Rubber*>(occurrence.getEntity());
|
||||
|
||||
if ( !rubber ) break;
|
||||
|
||||
Transformation transformation = occurrence.getPath().getTransformation();
|
||||
_drawingQuery.drawRubber ( rubber, redrawBox, transformation );
|
||||
}
|
||||
|
||||
Name extensionName = "";
|
||||
for ( ; iselector != _selectors.end() ; iselector++ ) {
|
||||
Occurrence occurrence = (*iselector)->getOccurrence();
|
||||
Transformation transformation = occurrence.getPath().getTransformation();
|
||||
|
||||
ExtensionGo* eGo = dynamic_cast<ExtensionGo*>(occurrence.getEntity());
|
||||
|
||||
if ( !eGo ) break;
|
||||
|
||||
Transformation transformation = occurrence.getPath().getTransformation();
|
||||
if ( eGo->getName() != extensionName ) {
|
||||
extensionName = eGo->getName();
|
||||
_drawingQuery.setDrawExtensionGo ( extensionName );
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include <csignal>
|
||||
#include <iostream>
|
||||
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/Exception.h"
|
||||
#include "hurricane/viewer/ExceptionWidget.h"
|
||||
#include "hurricane/viewer/HApplication.h"
|
||||
|
||||
|
@ -75,9 +75,9 @@ namespace Hurricane {
|
|||
try {
|
||||
return QApplication::notify ( object, event );
|
||||
}
|
||||
catch ( Error& e ) {
|
||||
catch ( Exception& e ) {
|
||||
ExceptionWidget* ew = new ExceptionWidget ();
|
||||
ew->setMessage ( e.getReason().c_str() );
|
||||
ew->setMessage ( e.what().c_str() );
|
||||
if ( ew->exec() == QDialog::Rejected )
|
||||
kill ( getpid(), SIGSEGV );
|
||||
}
|
||||
|
|
|
@ -51,6 +51,12 @@ namespace Hurricane {
|
|||
const Entity* lhsEntity = lhs->getOccurrence().getEntity();
|
||||
const Entity* rhsEntity = rhs->getOccurrence().getEntity();
|
||||
|
||||
const Component* lhsComponent = dynamic_cast<const Component*> ( lhsEntity );
|
||||
const Component* rhsComponent = dynamic_cast<const Component*> ( rhsEntity );
|
||||
if ( lhsComponent && rhsComponent ) return lhs < rhs; // lhs & rhs are Components.
|
||||
if ( lhsComponent && !rhsComponent ) return true; // lhs only is an Component.
|
||||
if ( !lhsComponent && rhsComponent ) return false; // rhs only is an Component.
|
||||
|
||||
const Instance* lhsInstance = dynamic_cast<const Instance*> ( lhsEntity );
|
||||
const Instance* rhsInstance = dynamic_cast<const Instance*> ( rhsEntity );
|
||||
//cerr << "Instance LHS: " << (void*)lhsInstance << " RHS: " << (void*)rhsInstance << endl;
|
||||
|
@ -59,12 +65,6 @@ namespace Hurricane {
|
|||
if ( lhsInstance && !rhsInstance ) return true; // lhs only is an Instance.
|
||||
if ( !lhsInstance && rhsInstance ) return false; // rhs only is an Instance.
|
||||
|
||||
const Component* lhsComponent = dynamic_cast<const Component*> ( lhsEntity );
|
||||
const Component* rhsComponent = dynamic_cast<const Component*> ( rhsEntity );
|
||||
if ( lhsComponent && rhsComponent ) return lhs < rhs; // lhs & rhs are Components.
|
||||
if ( lhsComponent && !rhsComponent ) return true; // lhs only is an Component.
|
||||
if ( !lhsComponent && rhsComponent ) return false; // rhs only is an Component.
|
||||
|
||||
const Rubber* lhsRubber = dynamic_cast<const Rubber*> ( lhsEntity );
|
||||
const Rubber* rhsRubber = dynamic_cast<const Rubber*> ( rhsEntity );
|
||||
if ( lhsRubber && rhsRubber ) return lhs < rhs; // lhs & rhs are Rubbers.
|
||||
|
|
Loading…
Reference in New Issue