Opened 13 years ago

Closed 13 years ago

Last modified 13 years ago

#323 closed defect (fixed)

Theme: Individual rule for Numeric property is disordered.

Reported by: jennyhe Owned by: madair
Priority: P2 Milestone: Future
Component: Widgets Version: 1.1.1
Severity: Major Keywords:
Cc: christine.bao@…, Chris.Claydon@… Browser: All
External ID: 1276835 Operating System: All
state: New


Report from Autodesk QA


  1. Open one flexible web layout with Polygon data.
  2. Theme->Select FeatId, Individual as Distribution rule -> Apply

Results: Please refer to the attached png file, the rule is disordered and not based on the FeatID value. If using one String property, it looks correct.

Expected results; The rule should refer to the value of FeatID.

Attachments (2)

Theme_Individual_Rule_disordered.PNG (109.8 KB ) - added by jennyhe 13 years ago.
SortTheme.patch (2.0 KB ) - added by christinebao 13 years ago.

Download all attachments as: .zip

Change History (8)

comment:1 by christinebao, 13 years ago

Tech diagnosis:
The code for getting new area rule is:

        $aggregateOptions = new MgFeatureAggregateOptions();

        $portion = 0.0;
        $increment = ($this->args['NUMRULES'] > 1) ? $increment = 1.0 / ($this->args['NUMRULES'] - 1) : 1.0;

        if ($this->args['DISTRO'] == 'INDIV_DIST')

            $dataReader = $featureService->SelectAggregate($resId, $layer->GetFeatureClassName(), $aggregateOptions);            
            while ($dataReader->ReadNext())
                $value = $this->GetFeaturePropertyValue($dataReader, $this->args['PROPERTYNAME']);

                $filterText = '"' . $this->args['PROPERTYNAME'] . '" = ';
                if ($this->args['DATATYPE'] == MgPropertyType::String)
                    $filterText .= "'" . $value . "'";
                    $filterText .= $value;

                $areaRuleXML = sprintf($areaRuleTemplate,
                    $this->args['PROPERTYNAME'] . ': ' . $value,
                    $this->InterpolateColor($portion, $this->args['FILLFROM'], $this->args['FILLTO'], $this->args['FILLTRANS']),
                    $this->InterpolateColor($portion, $this->args['LINEFROM'], $this->args['LINETO'], 0));

                $areaDoc = DOMDocument::loadXML($areaRuleXML);
                $areaNode = $doc->importNode($areaDoc->documentElement, true);
                  $areaTypeStyle->insertBefore($areaNode, $element);

                $portion += $increment;

It's not order by the property, thus the data are not ordered ascending or descending.

QA report if choose string property, the legend is not disordered. This is not true but a case of the data.

Although featureService has an option to set ordering filter (code as below), it's not supported by all providers, for example it's not supported by SDF. Thus it can't fully solve this problem.

            $orderByProperties = new MgStringCollection();
            $aggregateOptions->SetOrderingFilter($orderByProperties, MgOrderingOption::Ascending);

comment:2 by christinebao, 13 years ago

Because not all providers support order by, another solution is to order the list in memory.

by christinebao, 13 years ago

Attachment: SortTheme.patch added

comment:3 by christinebao, 13 years ago

To support all providers and make code simple, the second solution (sort in memory) is chosen. Please review the attached patch

comment:4 by christinebao, 13 years ago

Cc: Chris.Claydon@… added

Hi Chris, would you please review this patch? Thank you!

comment:5 by christinebao, 13 years ago

Resolution: fixed
Status: newclosed

Test the patch and it works.

The patch is committed to catch up the build. If there is any comment, please feel free to contact me. Thank you.

comment:6 by chrisclaydon, 13 years ago

The patch looks good.

Note: See TracTickets for help on using tickets.