问题标签 [nsbezierpath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1049 浏览

objective-c - 可可:两点之间的“随机”线?

在我的 Cocoa 爱好项目(在 OSX 上)中,我有一个确定了一些观点的观点。像这样的东西:

我想在这两点之间创建一条蜿蜒的线(永远不会交叉)。当然,要点可能会有所不同。我很熟悉,NSBezierPath但我不是图形高手。

对此有两种变体。给定NSBezierPath *p ...和设置[p moveToPoint:pt1]

  1. [p lineToPoint:ptx]在我创建锯齿状曲折线的地方使用
  2. [p curveToPoint:ptx controlPoint1:cpt1 controlPoint2:cpt2]与平滑的曲折线一起使用。

第二种情况似乎更困难,因为还必须计算合理的控制点。

最后,我希望能够调整线条蜿蜒的量。如果我将一个变量设置为 1,那么和int numOfIntermediatePoints之间会有一条平滑曲线。如果我设置为 10,则线路中的移动会更多。我不希望最后的中间点离终点很远(在行尾留下很大的变化)。pt1pt2numberOfIntermediatePoints

我已经研究过使用 Perlin 噪声,但似乎很难将线引导到终点。似乎计算一个NSPoint项目数组(可能还有一个控制点数组,对于情况二)然后循环它们以创建线是有意义的。

最好的方法是什么?


更新

按照 Tommy 的建议,我将Raymond Hill 的 Javascript-Voronoi库移植到了 Obj-C。你可以在这里找到它:https ://github.com/ccheaton/objcvoronoi


另一个更新

还有一个更新——我使用了 Dijkstra 的算法,发现它对于我想要实现的目标来说太过分了。我最终实现了它的简化变体,允许我为随机线指定引导节点。在这张图中,线的起点在左中,线的终点在右中,在 (xMax * 0.33, 0) 和 (xMax * 0.66, yMax) 处有引导点。

寻路示例


最终更新

为了让它稍微不那么锯齿,我添加了一个可选的松弛算法。现在性能不是很好,但这对我的使用无关紧要。

应用于小区站点的松弛算法

0 投票
1 回答
1467 浏览

objective-c - NSString 绘图与 String 作为 NSBezierPath 绘图

我需要针对(可能是巨大的)数量的组件执行有效的命中测试,因此我将所有原语表示为NSBezierPath实例。到目前为止一切都很好。

现在我在转换NSString对象时遇到了麻烦,特别是在视图中反映它们的位置:我正在使用NSString (BezierConversions)Apple 的 SpeedometerView 示例中的类别将字符串转换为贝塞尔路径。

为字符串创建的贝塞尔路径看起来很棒,但是将其定位为NSString与视图中实例位置的位置相匹配并不完全有效,所以我想这个问题真的是关于

  • NSBezierPathtransformUsingAffineTransform:对比
  • NSAffineTransform应用于视图的组合和NSString drawAtPoint:

在我的测试项目中,即使是微不足道的情况也失败了:

紫色 = NSString drawAtPoint,灰色 = NSBezierPath 填充

使用以下方法绘制的字符串的灰色贝塞尔表示:

和紫色的字符串通过

相同的属性,相同的输入位置,不同的视图位置。
旋转文本只会变得更糟。


更新#1

看起来它正在归结为由返回的不同边界框

  • NSString sizeWithAttributes:
  • NSBezierPath bounds

现在尝试使用NSStringboundingRectWithSize

0 投票
2 回答
231 浏览

objective-c - 查看 NSBezierPath(s) 是否形成某种形状或图案

好的,所以我正在制作一个程序,我将在其中普遍接受可可触控板事件,并将这些事件映射到 NSBezierPaths。例如,我可能有一个仅来自一根手指的 NSBezierPath,它是圆形的(ish)。或者路径可能是右向箭头的形状。或者它实际上可能是两个并排的垂直 NSBezierPaths。我需要做的是查看这些 NSBezierPaths 并确定它们最相似的/形状模式......有没有人有任何指针?

谢谢

0 投票
1 回答
847 浏览

cocoa - 如何在运行时使用 NSFont 创建自定义字体

我正在编写一个 Mac 应用程序,它需要能够在运行时使用 Cocoa 创建、加载和使用自定义字体。我已经NSFont彻底研究了这个类,我能找到的只是加载现有字体和更改简单参数(EG 大小、重量、间距等)的 API。

我需要能够在我的程序运行时从头开始创建自定义字形,最好使用NSBezierPath,将它们组合成一个NSFont对象或类似的东西,并使用这种字体将文本绘制到屏幕上。

这可能吗?我想字体创建应用程序必须使用它。如果可能,它是如何完成的?

0 投票
1 回答
737 浏览

macos - 我无法在 NSBezierPath 绘制的图中正确定位 NSTextField

我是初学者 Cocoa 程序员。我希望在要使用 XCode 4.3.2 for OS X on Lion 开发的程序中,以编程方式将 Cocoa NSTextField(自定义视图的子视图)放置在自定义视图上绘制的几何图旁边。为了使我的问题的示例保持简单,假设图表是一个包含文本字段的框(除了 NSTextField 可用的边框或边框之外,而且更远;实际上,我的图表更复杂)。我发现文本字段和框未按预期对齐(请参见下面的示例代码)。为什么?

我制作了一个简单的非基于文档的项目作为诊断示例,其中我将自定义视图拖到应用程序窗口中,添加了下面的代码,并建立了从 IBOutlet 到视图的连接:

AnAppDelegate.h:

AnAppDelegate.m:

运行此程序时,该框出现在文本字段的左侧和下方,显然是每个维度中文本字段的高度。我希望它出现在 NSTextField 子视图的“下方”,并被它隐藏。(当然,这在生产程序中是不明智的。)

现在,为了更接近我想要的,如果取消注释上面源代码的注释行(将 boxRect 附加到框路径而不是文本字段的框架),那么我的框出现在文本开头 10 个单位框架 - 但我预计我应该必须在原点添加 -10 个单位才能做到这一点,而不是 +10 个单位。

到底是怎么回事?

0 投票
2 回答
6552 浏览

objective-c - 在 Cocoa 中画线?

单击按钮后如何在特定窗口中画一条线?

我正在使用这个:

但只有当我把它放在:

我怎么能解决这个问题?我的目标是根据收到的详细信息(坐标)创建一个可以画线的应用程序

谢谢你。

0 投票
1 回答
601 浏览

point - NSBezierPath 中的 NSPoint

我想知道是否有任何方法可以确定 NSPoint 是否在 NSBezierPath 内。喜欢:

但是使用 BezierPath。

在此先感谢,本

0 投票
1 回答
774 浏览

cocoa - 凹 NSBezierPath

我有以下绘图代码:

结果是:

截屏

我如何达到内部绿色圆圈是透明的?用透明颜色替换绿色 NSColor 不起作用,合乎逻辑;-)

有没有办法与 NSBezierPath 的实例相交或用另一种方法解决这个问题?

0 投票
1 回答
422 浏览

cocoa - CGPathApplierFunction 异常

CGPathRef有 5 个元素,我想删除起点,并且有一个包含 4 个元素的路径,其起点与我要删除起点的路径的终点相同。

这是我现在生成异常的函数:

0 投票
2 回答
1966 浏览

objective-c - 有没有办法获取 NSBezierPath 对象的所有点的 x,y 坐标?

如果我有一个NSBezierPath对象,有没有办法获取所有绘制点的坐标(x,y)?我想NSRect沿着路径移动。