static real step_distance_from(Step *step, Point *point) { Element *elem = &step->element; Rectangle rect; real dist; dist = distance_line_point(&step->north.pos,&step->NU1, STEP_LINE_WIDTH,point); dist = MIN(dist,distance_line_point(&step->NU1,&step->NU2, STEP_LINE_WIDTH,point)); dist = MIN(dist,distance_line_point(&step->NU2,&step->A, STEP_LINE_WIDTH,point)); dist = MIN(dist,distance_line_point(&step->D,&step->SD1, STEP_LINE_WIDTH,point)); dist = MIN(dist,distance_line_point(&step->SD1,&step->SD2, STEP_LINE_WIDTH,point)); dist = MIN(dist,distance_line_point(&step->SD2,&step->south.pos, STEP_LINE_WIDTH,point)); rect.left = elem->corner.x; rect.right = elem->corner.x + elem->width; rect.top = elem->corner.y; rect.bottom = elem->corner.y + elem->height; dist = MIN(dist,distance_rectangle_point(&rect, point)); return dist; }
static real annotation_distance_from(Annotation *annotation, Point *point) { Point *endpoints; Rectangle bbox; endpoints = &annotation->connection.endpoints[0]; text_calc_boundingbox(annotation->text,&bbox); return MIN(distance_line_point(&endpoints[0], &endpoints[1], ANNOTATION_LINE_WIDTH, point), distance_rectangle_point(&bbox,point)); }
static real box_distance_from(Box *box, Point *point) { Element *elem = &box->element; Rectangle rect; rect.left = elem->corner.x - box->border_width/2; rect.right = elem->corner.x + elem->width + box->border_width/2; rect.top = elem->corner.y - box->border_width/2; rect.bottom = elem->corner.y + elem->height + box->border_width/2; return distance_rectangle_point(&rect, point); }
static real goal_distance_from(Goal *goal, Point *point) { Element *elem = &goal->element; Rectangle rect; rect.left = elem->corner.x - GOAL_LINE_WIDTH/2; rect.right = elem->corner.x + elem->width + GOAL_LINE_WIDTH/2; rect.top = elem->corner.y - GOAL_LINE_WIDTH/2; rect.bottom = elem->corner.y + elem->height + GOAL_LINE_WIDTH/2; return distance_rectangle_point(&rect, point); }
static real newgroup_distance_from(NewGroup *group, Point *point) { Element *elem = &group->element; Rectangle rect; rect.left = elem->corner.x; rect.right = elem->corner.x + elem->width; rect.top = elem->corner.y; rect.bottom = elem->corner.y + elem->height; return distance_rectangle_point(&rect, point); }
static real other_distance_from(Other *other, Point *point) { Element *elem = &other->element; Rectangle rect; rect.left = elem->corner.x - OTHER_LINE_WIDTH/2; rect.right = elem->corner.x + elem->width + OTHER_LINE_WIDTH/2; rect.top = elem->corner.y - OTHER_LINE_WIDTH/2; rect.bottom = elem->corner.y + elem->height + OTHER_LINE_WIDTH/2; return distance_rectangle_point(&rect, point); }
static real image_distance_from(EImage *image, Point *point) { Element *elem = &image->element; Rectangle rect; rect.left = elem->corner.x - image->border_width; rect.right = elem->corner.x + elem->width + image->border_width; rect.top = elem->corner.y - image->border_width; rect.bottom = elem->corner.y + elem->height + image->border_width; return distance_rectangle_point(&rect, point); }
static real textobj_distance_from(Textobj *textobj, Point *point) { if (textobj->text_angle != 0) { Point poly[4]; _textobj_get_poly (textobj, poly); return distance_polygon_point(poly, 4, 0.0, point); } if (textobj->show_background) return distance_rectangle_point(&textobj->object.bounding_box, point); return text_distance_from(textobj->text, point); }
static real transition_distance_from(Transition *transition, Point *point) { real dist; dist = distance_rectangle_point(&transition->rceptbb,point); dist = MIN(dist,distance_line_point(&transition->C,&transition->D, TRANSITION_LINE_WIDTH,point)); dist = MIN(dist,distance_line_point(&transition->north.pos,&transition->NU1, TRANSITION_LINE_WIDTH,point)); dist = MIN(dist,distance_line_point(&transition->NU1,&transition->NU2, TRANSITION_LINE_WIDTH,point)); dist = MIN(dist,distance_line_point(&transition->NU2,&transition->SD1, TRANSITION_LINE_WIDTH,point)); /* A and B are on the [NU2; SD1] segment. */ dist = MIN(dist,distance_line_point(&transition->SD1,&transition->SD2, TRANSITION_LINE_WIDTH,point)); dist = MIN(dist,distance_line_point(&transition->SD2,&transition->south.pos, TRANSITION_LINE_WIDTH,point)); return dist; }
static real pgram_distance_from(Pgram *pgram, Point *point) { Element *elem = &pgram->element; Rectangle rect; rect.left = elem->corner.x - pgram->border_width/2; rect.right = elem->corner.x + elem->width + pgram->border_width/2; rect.top = elem->corner.y - pgram->border_width/2; rect.bottom = elem->corner.y + elem->height + pgram->border_width/2; /* we do some fiddling with the left/right values to get good accuracy * without having to write a new distance checking routine */ if (rect.top > point->y) { /* point above parallelogram */ if (pgram->shear_grad > 0) rect.left += pgram->shear_grad * (rect.bottom - rect.top); else rect.right += pgram->shear_grad * (rect.bottom - rect.top); } else if (rect.bottom < point->y) { /* point below parallelogram */ if (pgram->shear_grad > 0) rect.right -= pgram->shear_grad * (rect.bottom - rect.top); else rect.left -= pgram->shear_grad * (rect.bottom - rect.top); } else { /* point withing vertical interval of parallelogram -- modify * left and right sides to `unshear' the parallelogram. This * increases accuracy for points near the */ if (pgram->shear_grad > 0) { rect.left += pgram->shear_grad * (rect.bottom - point->y); rect.right -= pgram->shear_grad * (point->y - rect.top); } else { rect.left -= pgram->shear_grad * (point->y - rect.top); rect.right += pgram->shear_grad * (rect.bottom - point->y); } } return distance_rectangle_point(&rect, point); }
static real rendobj_distance_from(RenderObject *rend_obj, Point *point) { Element *elem = &rend_obj->element; Rectangle rect; real dist; real text_dist; /* Todo: Make this better, more changeable by the user. */ rect.left = elem->corner.x; rect.right = elem->corner.x + elem->width; rect.top = elem->corner.y ; rect.bottom = elem->corner.y + elem->height; dist = distance_rectangle_point(&rect, point); if (rend_obj->desc->use_text) { text_dist = text_distance_from(rend_obj->text, point); if (text_dist<dist) dist = text_dist; } return dist; }
static real _dae_distance_from(DiagramAsElement *dae, Point *point) { DiaObject *obj = &dae->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real state_distance_from(State *state, Point *point) { DiaObject *obj = &state->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real function_distance_from(Function *pkg, Point *point) { DiaObject *obj = &pkg->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real basestation_distance_from(Basestation *basestation, Point *point) { DiaObject *obj = &basestation->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real classicon_distance_from(Classicon *cicon, Point *point) { DiaObject *obj = &cicon->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real grid_object_distance_from(Grid_Object *grid_object, Point *point) { DiaObject *obj = &grid_object->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real branch_distance_from(Branch *branch, Point *point) { DiaObject *obj = &branch->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real largepackage_distance_from(LargePackage *pkg, Point *point) { DiaObject *obj = &pkg->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real chronoref_distance_from(Chronoref *chronoref, Point *point) { DiaObject *obj = &chronoref->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real analog_clock_distance_from(Analog_Clock *analog_clock, Point *point) { DiaObject *obj = &analog_clock->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real node_distance_from(Node *node, Point *point) { DiaObject *obj = &node->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
real aadlbox_distance_from(Aadlbox *aadlbox, Point *point) { DiaObject *obj = &aadlbox->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real smallpackage_distance_from(SmallPackage *pkg, Point *point) { Object *obj = &pkg->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real objet_distance_from(Objet *ob, Point *point) { DiaObject *obj = &ob->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real usecase_distance_from(Usecase *usecase, Point *point) { DiaObject *obj = &usecase->element.object; return distance_rectangle_point(&obj->bounding_box, point); }
static real component_distance_from(Component *cmp, Point *point) { DiaObject *obj = &cmp->element.object; return distance_rectangle_point(&obj->bounding_box, point); }