问题标签 [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.
objective-c - 可可:两点之间的“随机”线?
在我的 Cocoa 爱好项目(在 OSX 上)中,我有一个确定了一些观点的观点。像这样的东西:
我想在这两点之间创建一条蜿蜒的线(永远不会交叉)。当然,要点可能会有所不同。我很熟悉,NSBezierPath
但我不是图形高手。
对此有两种变体。给定NSBezierPath *p ...
和设置[p moveToPoint:pt1]
[p lineToPoint:ptx]
在我创建锯齿状曲折线的地方使用[p curveToPoint:ptx controlPoint1:cpt1 controlPoint2:cpt2]
与平滑的曲折线一起使用。
第二种情况似乎更困难,因为还必须计算合理的控制点。
最后,我希望能够调整线条蜿蜒的量。如果我将一个变量设置为 1,那么和int numOfIntermediatePoints
之间会有一条平滑曲线。如果我设置为 10,则线路中的移动会更多。我不希望最后的中间点离终点很远(在行尾留下很大的变化)。pt1
pt2
numberOfIntermediatePoints
我已经研究过使用 Perlin 噪声,但似乎很难将线引导到终点。似乎计算一个NSPoint
项目数组(可能还有一个控制点数组,对于情况二)然后循环它们以创建线是有意义的。
最好的方法是什么?
更新
按照 Tommy 的建议,我将Raymond Hill 的 Javascript-Voronoi库移植到了 Obj-C。你可以在这里找到它:https ://github.com/ccheaton/objcvoronoi
另一个更新
还有一个更新——我使用了 Dijkstra 的算法,发现它对于我想要实现的目标来说太过分了。我最终实现了它的简化变体,允许我为随机线指定引导节点。在这张图中,线的起点在左中,线的终点在右中,在 (xMax * 0.33, 0) 和 (xMax * 0.66, yMax) 处有引导点。
最终更新
为了让它稍微不那么锯齿,我添加了一个可选的松弛算法。现在性能不是很好,但这对我的使用无关紧要。
objective-c - NSString 绘图与 String 作为 NSBezierPath 绘图
我需要针对(可能是巨大的)数量的组件执行有效的命中测试,因此我将所有原语表示为NSBezierPath
实例。到目前为止一切都很好。
现在我在转换NSString
对象时遇到了麻烦,特别是在视图中反映它们的位置:我正在使用NSString (BezierConversions)
Apple 的 SpeedometerView 示例中的类别将字符串转换为贝塞尔路径。
为字符串创建的贝塞尔路径看起来很棒,但是将其定位为NSString
与视图中实例位置的位置相匹配并不完全有效,所以我想这个问题真的是关于
NSBezierPath
和transformUsingAffineTransform:
对比NSAffineTransform
应用于视图的组合和NSString drawAtPoint:
在我的测试项目中,即使是微不足道的情况也失败了:
使用以下方法绘制的字符串的灰色贝塞尔表示:
和紫色的字符串通过
相同的属性,相同的输入位置,不同的视图位置。
旋转文本只会变得更糟。
更新#1
看起来它正在归结为由返回的不同边界框
NSString sizeWithAttributes:
NSBezierPath bounds
现在尝试使用NSString
boundingRectWithSize
objective-c - 查看 NSBezierPath(s) 是否形成某种形状或图案
好的,所以我正在制作一个程序,我将在其中普遍接受可可触控板事件,并将这些事件映射到 NSBezierPaths。例如,我可能有一个仅来自一根手指的 NSBezierPath,它是圆形的(ish)。或者路径可能是右向箭头的形状。或者它实际上可能是两个并排的垂直 NSBezierPaths。我需要做的是查看这些 NSBezierPaths 并确定它们最相似的/形状模式......有没有人有任何指针?
谢谢
cocoa - 如何在运行时使用 NSFont 创建自定义字体
我正在编写一个 Mac 应用程序,它需要能够在运行时使用 Cocoa 创建、加载和使用自定义字体。我已经NSFont
彻底研究了这个类,我能找到的只是加载现有字体和更改简单参数(EG 大小、重量、间距等)的 API。
我需要能够在我的程序运行时从头开始创建自定义字形,最好使用NSBezierPath
,将它们组合成一个NSFont
对象或类似的东西,并使用这种字体将文本绘制到屏幕上。
这可能吗?我想字体创建应用程序必须使用它。如果可能,它是如何完成的?
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 个单位。
到底是怎么回事?
objective-c - 在 Cocoa 中画线?
单击按钮后如何在特定窗口中画一条线?
我正在使用这个:
但只有当我把它放在:
我怎么能解决这个问题?我的目标是根据收到的详细信息(坐标)创建一个可以画线的应用程序
谢谢你。
point - NSBezierPath 中的 NSPoint
我想知道是否有任何方法可以确定 NSPoint 是否在 NSBezierPath 内。喜欢:
但是使用 BezierPath。
在此先感谢,本
cocoa - 凹 NSBezierPath
我有以下绘图代码:
结果是:
我如何达到内部绿色圆圈是透明的?用透明颜色替换绿色 NSColor 不起作用,合乎逻辑;-)
有没有办法与 NSBezierPath 的实例相交或用另一种方法解决这个问题?
cocoa - CGPathApplierFunction 异常
我CGPathRef
有 5 个元素,我想删除起点,并且有一个包含 4 个元素的路径,其起点与我要删除起点的路径的终点相同。
这是我现在生成异常的函数:
objective-c - 有没有办法获取 NSBezierPath 对象的所有点的 x,y 坐标?
如果我有一个NSBezierPath
对象,有没有办法获取所有绘制点的坐标(x,y)?我想NSRect
沿着路径移动。