iOS:Quartz2d 绘制平面图

iOS:Quartz2d to Draw floor plans

我正在构建一个应用程序,我想在其中向用户显示平面图,这是交互式的,这意味着他们可以点击每个区域缩放这些区域并找到更详细的信息。

我从后端收到 JSON 响应,其中包含平面图、形状信息和点的元数据信息。我打算使用石英解析点并在视图上绘制形状(开始学习 Quartz2d)。作为开始,我做了一个简单的蓝图,如下图所示。

根据蓝图,中心位于 (0,0) 并且有 4 个点。

以下是我从后端获得的蓝图要点。

X:-1405.52, Y:686.18
X:550.27, Y:683.97
X:1392.26, Y:-776.79
X:-1405.52, Y:-776.79

我试着画了这个

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code

            for (Shape *shape in shapes.shapesArray) {
                CGContextRef context = UIGraphicsGetCurrentContext();
                CGContextSetLineWidth(context, 2.0);
                CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
                BOOL isFirstPoint = YES;
                for (Points *point in shape.arrayOfPoints) {
                    NSLog(@"X:%f, Y:%f",point.x,point.y);
                    if (isFirstPoint) {
                        CGContextMoveToPoint(context, point.x, point.y);
                        //[bpath moveToPoint:CGPointMake(point.x,point.y)];
                        isFirstPoint = NO;
                        continue;
                    }
                    CGContextAddLineToPoint(context, point.x, point.x);

                }
                CGContextStrokePath(context);
            }

}

但我得到的结果是下面的图片,看起来不正确

问题:

  1. 我的方向是否正确?

  2. 如何在-ve方向画点?

  3. 根据坐标,绘图会很大,我想先画出来,然后缩小以适合屏幕,以便用户稍后可以放大/平移等

更新:

我已经使用平移和缩放实现了一些基本的东西。现在的问题是我如何将绘制的内容适合视图边界。由于我的坐标很大,它超出了范围,我希望它适合。

请在下面找到我拥有的测试代码。 知道如何搭配吗?

DrawshapefromJSONPoints

几点观察:

为此使用 quartz 没有什么 错误 ,但您可能会发现使用 OpenGL 更灵活,因为您提到了命中测试的要求区域并实时缩放模型。

您的代码假设一个 有序 点列表,因为您使用 CGContextMoveToPoint 绘制路径。如果这是由数据合同保证的,那很好;但是,如果 JSON.

中返回了多个闭合路径,则需要编写更智能的渲染器

问题 2 和 3 可以用计算机图形学的入门知识来解决(特别是 模型-视图矩阵变换)。如果您的世界坐标以 (0,0,0) 为中心,您可以通过对每个顶点应用标量来缩放顶点。当您不使用 quartz-2d 坐标系 (0,0)-(w, h)

时,在负轴上绘制点更有意义

我找到了解决问题的方法。现在我可以从一组点绘制形状并将它们适合屏幕,还可以在不损失质量的情况下缩放它们。请在下面找到项目的 link。这可以调整以支持颜色、不同的形状,我目前只处理多边形。

DrawShapeFromJSON