@@ -5142,6 +5142,22 @@ Descriptor::Properties DbMasterEdgeTypeDescriptor::getDBProperties(
51425142{
51435143 Properties props;
51445144
5145+ auto * gui = Gui::get ();
5146+
5147+ SelectionSet rules;
5148+ for (auto * tech : db_->getTechs ()) {
5149+ for (auto * rule : tech->getCellEdgeSpacingTable ()) {
5150+ if (rule->getFirstEdgeType () == edge->getEdgeType ()) {
5151+ rules.insert (gui->makeSelected (rule));
5152+ } else if (rule->getSecondEdgeType () == edge->getEdgeType ()) {
5153+ rules.insert (gui->makeSelected (rule));
5154+ }
5155+ }
5156+ }
5157+ if (!rules.empty ()) {
5158+ props.push_back ({" Rules" , rules});
5159+ }
5160+
51455161 if (edge->getCellRow () != -1 ) {
51465162 props.push_back ({" Cell row" , edge->getCellRow ()});
51475163 }
@@ -5180,4 +5196,62 @@ Descriptor::Properties DbMasterEdgeTypeDescriptor::getDBProperties(
51805196 return props;
51815197}
51825198
5199+ // ////////////////////////////////////////////////
5200+
5201+ DbCellEdgeSpacingDescriptor::DbCellEdgeSpacingDescriptor (odb::dbDatabase* db)
5202+ : BaseDbDescriptor<odb::dbCellEdgeSpacing>(db)
5203+ {
5204+ }
5205+
5206+ std::string DbCellEdgeSpacingDescriptor::getName (const std::any& object) const
5207+ {
5208+ auto * obj = getObject (object);
5209+ return obj->getFirstEdgeType () + " - " + obj->getSecondEdgeType ();
5210+ }
5211+
5212+ std::string DbCellEdgeSpacingDescriptor::getTypeName () const
5213+ {
5214+ return " CellEdgeSpacingRule" ;
5215+ }
5216+
5217+ bool DbCellEdgeSpacingDescriptor::getBBox (const std::any& object,
5218+ odb::Rect& bbox) const
5219+ {
5220+ return false ;
5221+ }
5222+
5223+ void DbCellEdgeSpacingDescriptor::highlight (const std::any& object,
5224+ Painter& painter) const
5225+ {
5226+ }
5227+
5228+ void DbCellEdgeSpacingDescriptor::visitAllObjects (
5229+ const std::function<void (const Selected&)>& func) const
5230+ {
5231+ for (auto * tech : db_->getTechs ()) {
5232+ for (auto * rule : tech->getCellEdgeSpacingTable ()) {
5233+ func ({rule, this });
5234+ }
5235+ }
5236+ }
5237+
5238+ Descriptor::Properties DbCellEdgeSpacingDescriptor::getDBProperties (
5239+ odb::dbCellEdgeSpacing* rule) const
5240+ {
5241+ Properties props;
5242+
5243+ props.push_back ({" First edge" , rule->getFirstEdgeType ()});
5244+ props.push_back ({" Second edge" , rule->getSecondEdgeType ()});
5245+
5246+ props.push_back ({" Spacing" , Property::convert_dbu (rule->getSpacing (), true )});
5247+ props.push_back ({" Except abutted" , rule->isExceptAbutted ()});
5248+ props.push_back (
5249+ {" Except non filler in between" , rule->isExceptNonFillerInBetween ()});
5250+ props.push_back ({" Optional" , rule->isOptional ()});
5251+ props.push_back ({" Soft" , rule->isSoft ()});
5252+ props.push_back ({" Exact" , rule->isExact ()});
5253+
5254+ return props;
5255+ }
5256+
51835257} // namespace gui
0 commit comments