protected override void GenerateConditions(IWorldState worldState) { Merchant merchant = worldState.GetMerchant(merchantId); conditions = new List <Condition>(); MoneyCondition moneyCond = new MoneyCondition(buyerId, merchant.saleEntries[saleEntryIndex].price); conditions.Add(moneyCond); LocationCondition locationCond = new LocationCondition(buyerId, merchant.position); conditions.Add(locationCond); }
public void RunQuery() { // ��ȡ��ͼӦ�ó��������̶��� MapApplication mapApi = HostMapApplicationServices.Application; ProjectModel proj = mapApi.ActiveProject; DrawingSet drawingSet = proj.DrawingSet; //������ͼ�μ��߽� proj.DrawingSet.ZoomExtents(); //ʹ��LocationCondition������һ����ѯ���� LocationCondition qryCondition = new LocationCondition (); qryCondition.LocationType = LocationType.LocationInside ; qryCondition.JoinOperator = JoinOperator .OperatorAnd ; // ����Բ�߽� CircleBoundary boundary = null; PromptPointResult pointRes = Utility.AcadEditor.GetPoint("\nѡ��ԭ��: "); if (pointRes.Status == PromptStatus.OK) { Point3d point = pointRes.Value; PromptDistanceOptions distOptions = new PromptDistanceOptions("\nѡ��뾶: "); distOptions.BasePoint = point; distOptions.UseBasePoint = true; distOptions.DefaultValue = 0.0; PromptDoubleResult doubleRes = Utility.AcadEditor.GetDistance(distOptions); if (doubleRes.Status == PromptStatus.OK) { double rad = doubleRes.Value; boundary = new CircleBoundary(new Point3d(point.X, point.Y, 0.0), rad); } } // qryCondition.Boundary = boundary; //����һ��������֧ QueryBranch qryBranch = QueryBranch.Create (); qryBranch.JoinOperator = JoinOperator.OperatorAnd; qryBranch.AppendOperand(qryCondition); ////ʹ��PropertyCondition������һ�����Բ�ѯ����(LWPOLYLINE) PropertyCondition propCondition= new PropertyCondition(); //JoinOperator.OperatorAnd, PropertyType.EntityType, ConditionOperator.ConditionEqual, "LWPOLYLINE"; propCondition.JoinOperator = JoinOperator.OperatorAnd ; propCondition.PropertyType = PropertyType.EntityType ; propCondition.ConditionOperator = ConditionOperator.ConditionEqual ; propCondition.Value = "LWPOLYLINE"; // ͨ��QueryBranch�Ĺ��캯��������һ��������ѯ��֧�� QueryBranch subBranch = new QueryBranch(JoinOperator.OperatorAnd); // ����һ�����в�ѯ�����ͷ�֧�IJ�ѯ���� subBranch.AppendOperand(propCondition); qryBranch.AppendOperand(subBranch); // ����һ����ѯ�� QueryModel qryModel = proj.CreateQuery (true); // ��ɲ�ѯ�Ķ��塣 qryModel.Define (qryBranch); //���û���ģʽ qryModel.Mode = QueryType.QueryDraw; //�����ѯ qryModel.Define(qryBranch); //ִ�в�ѯ�� qryModel.Run(); Utility.AcadEditor.WriteMessage("\n ��ɲ�ѯ ��"); }
/// <summary> /// Defines the query. /// </summary> /// <param name="queryModel">The query model.</param> /// <returns></returns> private bool DefineQuery(QueryModel queryModel) { //_logger.Info("Defining AutoCAD Map Query..."); bool retVal = false; //_logger.Debug("Start DefineQuery"); try { // create query branch // QueryBranch queryBranch = QueryBranch.Create(); // create query conditions // IList <QueryCondition> queryConditions = new List <QueryCondition>(); // location filter // if (this.UseBoundry) { //_logger.Info("Defining AutoCAD Map Location Query..."); // define the window based on the users selection points // LocationCondition qryCondition = new LocationCondition(); qryCondition.JoinOperator = JoinOperator.OperatorAnd; qryCondition.LocationType = this.LocationType; LocationBoundary boundary = new PolygonBoundary(this.SelectionPoints); qryCondition.Boundary = boundary; queryBranch.AppendOperand(qryCondition); queryConditions.Add(qryCondition); } // object filter // if (this.ObjectFilters.Count == 0) { //_logger.Info("Defining AutoCAD Map Property * Query..."); PropertyCondition propCondition = new PropertyCondition(); propCondition.JoinOperator = JoinOperator.OperatorAnd; propCondition.PropertyType = PropertyType.EntityType; propCondition.Value = "*"; queryBranch.AppendOperand(propCondition); queryConditions.Add(propCondition); } else { bool isFirstObjectType = true; int firstIndex = 0; int lastIndex = 0; firstIndex = queryBranch.OperandCount; //_logger.Info("Defining AutoCAD Map Property Query..."); foreach (string objectFilter in this.ObjectFilters) { PropertyCondition propCondition = new PropertyCondition(); if (isFirstObjectType == true) { propCondition.JoinOperator = JoinOperator.OperatorAnd; isFirstObjectType = false; } else { propCondition.JoinOperator = JoinOperator.OperatorOr; } propCondition.PropertyType = PropertyType.EntityType; propCondition.Value = objectFilter; queryBranch.AppendOperand(propCondition); queryConditions.Add(propCondition); } //TODO: Why does queryBranch.Group not work? if (this.ObjectFilters.Count > 1) { lastIndex = queryBranch.OperandCount - firstIndex; lastIndex -= 1; queryBranch.Group(firstIndex, lastIndex); } } // block name filter // if (this.BlockNameFilters.Count > 0) { bool isFirstBlockName = true; int firstIndex = 0; int lastIndex = 0; firstIndex = queryBranch.OperandCount; //_logger.Info("Defining AutoCAD Map Block Name Query..."); foreach (string blockNameFilter in this.BlockNameFilters) { PropertyCondition propCondition = new PropertyCondition(); if (isFirstBlockName == true) { propCondition.JoinOperator = JoinOperator.OperatorAnd; isFirstBlockName = false; } else { propCondition.JoinOperator = JoinOperator.OperatorOr; } propCondition.PropertyType = PropertyType.BlockName; propCondition.Value = blockNameFilter; queryBranch.AppendOperand(propCondition); queryConditions.Add(propCondition); } //TODO: Why does queryBranch.Group not work? if (this.BlockNameFilters.Count > 1) { lastIndex = queryBranch.OperandCount - firstIndex; lastIndex -= 1; queryBranch.Group(firstIndex, lastIndex); } } // layer filter // foreach (string layerFilter in this.LayerFilters) { PropertyCondition layerPropertyCondition = new PropertyCondition(); layerPropertyCondition.JoinOperator = JoinOperator.OperatorAnd; layerPropertyCondition.PropertyType = PropertyType.Layer; layerPropertyCondition.Value = layerFilter; queryBranch.AppendOperand(layerPropertyCondition); queryConditions.Add(layerPropertyCondition); } // Define query // queryModel.Define(queryBranch); // clean up foreach (QueryCondition pc in queryConditions) { pc.Dispose(); } queryBranch.Dispose(); retVal = true; } catch (System.Exception ex) { //_logger.Error("Error defining query", ex); throw; //AcadUtilities.WriteMessage("\nError defining query"); } //_logger.Debug("End DefineQuery"); return(retVal); }
public This CheckLocation(LocationCondition loc) { AddCondition(Condition.LocationCheck(loc)); return(this as This); }
public static Condition LocationCheck(LocationCondition loc) { return(New("location_check").Set("predicate", loc)); }