如何获取 Quartz 用于描边 NSBezierPath 的路径

2024-01-10

我使用这段代码用一条宽的黑色虚线来描画 NSBezierPath。

(c and strForBezier在其他地方定义)

NSGlyph glyph;
for(n = 0; n < len; n++) {
    glyph = [font glyphWithName: [strForBezier substringWithRange:NSMakeRange(n, 1)]];
    [path appendBezierPathWithGlyph: glyph inFont: font];
}

CGFloat pattern2[4]; pattern2[0]=5*c; pattern2[1]=2*c; pattern2[2]=2*c; pattern2[3]=2*c;
[path setLineDash:pattern2 count:4 phase:0];

[path setLineWidth:c];
[path stroke];
[[NSColor blueColor] set ];
[path fill];

如何获得黑色 NSBezierPath ?我假设构建并填充了 NSBezierPath 以描画初始曲线。


您可以通过划线和描边现有路径来创建路径,但这需要使用CGPathRef代替NSBezierPath.

CGMutablePathRef path0 = CGPathCreateMutable();
CGAffineTransform transform = CGAffineTransformMakeTranslation(20, 20);
// initial position is {20, 20}

CGGlyph glyph;
for(n = 0; n < len; n++)
{
    glyph = [font glyphWithName: [strForBezier substringWithRange:NSMakeRange(n, 1)]];
    CGPathRef glyphPath = CTFontCreatePathForGlyph((__bridge CTFontRef) font, glyph, NULL);
    CGPathAddPath(path0, &transform, glyphPath);
    CGPathRelease(glyphPath);

    // append the glyph advance to the transform
    CGSize advance;
    CTFontGetAdvancesForGlyphs((__bridge CTFontRef) font, kCTFontDefaultOrientation, &glyph, &advance, 1);
    transform.tx += advance.width;
    transform.ty += advance.height;
}

CGFloat pattern2[4]; pattern2[0]=5*c; pattern2[1]=2*c; pattern2[2]=2*c; pattern2[3]=2*c;
CGPathRef path1 = CGPathCreateCopyByDashingPath(path0, NULL, 0, pattern2, 4);
CGPathRef path2 = CGPathCreateCopyByStrokingPath(path1, NULL, c, kCGLineCapButt, kCGLineJoinMiter, CGFLOAT_MAX);

CGContextRef context = [NSGraphicsContext currentContext].graphicsPort;
CGContextAddPath(context, path2);
CGContextDrawPath(context, kCGPathFill);

CGPathRelease(path0);
CGPathRelease(path1);
CGPathRelease(path2);

如果你不舒服CGPathRef,您可以创建一个NSBezierPath然后将其转换为CGPathRef使用Apple文档中描述的方法从 NSBezierPath 对象构建 CGPathRef https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/CocoaDrawingGuide/Paths/Paths.html#//apple_ref/doc/uid/TP40003290-CH206-SW2(相反也是可能的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取 Quartz 用于描边 NSBezierPath 的路径 的相关文章

  • 以编程方式设置 Mac 鼠标/触控板速度

    我正在尝试更改我正在开发的应用程序的鼠标跟踪速度 注意 不是加速 我到处寻找一种方法来做到这一点 但找不到任何东西 我怀疑这与我在 IOKit hidsystem 框架上的这个函数中给出的值有关 IOHIDSetAccelerationWi
  • 如何判断相机是否正在被其他进程使用?

    在 OS X 中 如何判断摄像头或麦克风是否正在被其他应用程序或进程使用 除非其他应用程序锁定了设备 否则以下操作似乎不起作用 NSArray devices AVCaptureDevice devices for AVCaptureDev
  • 如何让程序在登录时自动启动?

    如何设置菜单栏应用程序在登录时自动启动 我希望这是默认的 我可以简单地通过在 info plist 中添加一个 bool 来做到这一点吗 此解决方案仅适用于非沙盒应用程序 LSSharedFile此解决方案中使用的功能仅适用于非沙盒应用程序
  • 从选定的文件夹中获取大小 >100MB 的文件列表及其路径目标 c

    我想获取我的 mac 系统的所有文件及其路径和大小的列表 由此 我只想过滤那些文件大小超过 100 MB 的文件 我使用下面的代码获取了系统的大小 NSError error NSFileManager fileManager NSFile
  • 如何使用 Cocoa Autolayout 根据优先级调整两个子视图的大小?

    我正在 Cocoa 中使用自动布局 有些事情对我来说并不清楚 我在一个窗口上有 2 个视图 每个视图的宽度是父窗口宽度的1 2 View1 View2 如果我调整窗口大小 我希望首先调整 View2 的大小 View1 View2 当 Vi
  • 经常访问 NSUserDefaults

    在我的应用程序的逻辑处理过程中 我需要频繁访问用户首选项 并多次访问 10 15 次 以确定需要处理什么以及如何处理 也许这个问题不是关于性能的问题 而是关于正确执行的问题 目前我正在做一个 NSUserDefaults standardU
  • 具有多列的 NSTableView

    有什么简单的方法可以将我的 NSTableView 设置为多列以仅在一列中显示某些数据 我已经设置了 IBOutlets 但我不知道从哪里开始 假设您没有使用 Cocoa Bindings Core Data 您可以通过实现以下两个方法来在
  • 如何创建具有倾斜效果的 NSAffineTransform?

    我对用 Cocoa 绘图还很陌生 并且正在开发一个涉及六边形网格的实验性应用程序 为了简化这个过程 我想倾斜坐标系 使 Y 轴向左旋转 30 度 我在苹果手机上看到了这个可可绘图指南 https developer apple com li
  • 创建主窗口后添加 NSTouchBar 支持

    我正在尝试添加对暴露的支持NSTouchBar按钮通过插件连接到我无法修改的应用程序 该插件是一个共享库 在创建主窗口后在运行时加载 我创建了一个AppDelegate如下 interface AppDelegate NSResponder
  • 将 NSWindow 的内容变灰

    我有一个NSWindow with 2 NSViews an NSSplitView和一个习惯NSView 访问数据以填充这些视图可能需要一些时间 在此期间 我想将这些视图的内容灰显 我的第一个方法是有一个黑色的第三个NSView覆盖另外2
  • 如何将本机 C 类型与 PerformSelectorOnMainThread: 一起使用?

    我想打电话 void setDoubleValue double value using performSelectorOnMainThread 我认为可行的是 NSNumber progress NSNumber numberWithDo
  • 如何向用户显示我的App当前的项目版本?

    我想将当前版本添加到我的应用程序的 关于 部分 如所附屏幕截图所示 Apple 提供版本控制 如何在您的应用程序中显示这些设置 经过进一步的搜索和测试 我自己找到了解决方案 NSDictionary infoDictionary NSBun
  • 最近打开的应用程序[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有什么方法可以获取最近打开的应用程序 例如 4 个 的列表吗 如果是这样 怎么办 可可麦克 看看LaunchServices LSSh
  • NSSharingService 共享子菜单

    如何在 Mac 应用程序中添加共享子菜单 例如 Safari gt 文件 gt 共享 我戳了戳Apple 共享服务示例代码 http developer apple com library mac samplecode SharingSer
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • 在可可中将 NSMutableArray 写入文件时出现问题

    一个真正的初学者问题 我有一个 NSView 子类 在其中创建一个包含 NSValues 的 NSMutableArray 当我想使用 writetofile atomatically 将数组写入文件时 文件已创建 但它不包含可变数组所包含
  • 如何在 Mac 上禁用屏幕保护程序/显示器睡眠

    有没有办法用可可禁用屏幕保护程序和显示器睡眠 OSX 10 8 中已弃用 UpdateSystemActivity OverallAct 的使用 现在推荐的方法是通过以下调用来阻止它 IOPMAssertionCreateWithName
  • 如何对来自 WebView 的changeAttributes: delegate pass-through做出有意义的反应?

    WebView支持 通过WebEditingDelegate 一种让委托实现各种操作的自定义行为的机制WebView 或私人WebHTMLView 收到 当执行诸如以下操作时 void changeAttributes id sender
  • NSPoint/NSRect 来自 NSTextView 中的字符

    所以我试图获取与 NSTextView 中特定字符的位置相对应的 NSPoint 或 NSRect 这就是我到目前为止所拥有的 效果不是很好 结果似乎有点不可预测 NSRange theTextRange theTextView layou
  • Cocoa 应用程序菜单栏不可点击

    我正在我的可可应用程序中构建一个菜单栏 其中包含以下代码 implementation我的自定义应用程序CustomApplication void setUpMenuBar CustomApplication sharedApplicat

随机推荐

  • 使用 COPY FROM stdin 将 bytea 数据导入 PostgreSQL

    我通过外部程序生成了一个 UTF 8 文件 用于导入 PostgreSQL 9 6 1 问题是bytea场 PWHASH 此文件的片段 使用 TAB 作为分隔符 COPY USERS ID CODE PWHASH EMAIL FROM st
  • 关于类成员函数指针的sizeof[重复]

    这个问题在这里已经有答案了 假设我们有一个 A 类 class A 和这些 typedef typedef void A a func ptr void typedef void func ptr void 我的问题是为什么 sizeof
  • 请讨论什么是 portlet 以及为什么使用 portlet

    为什么我要在 tomcat 和 gwt 之上使用 java portlet Portlet 是否会减少或不需要我使用 jsp 和 jsf Jboss 是否已成为 Portlet 演化文化的一部分 Jboss 是否满足 portlet jsr
  • 无法解析类型“jint”,以及 JNIEnv、jclass

    尝试使用 jni c 代码构建一个简单的 helloWorld android java 应用程序 我在 Windows 7 上使用 Eclipse Indigo 在非空间路径中安装了 ndk r8 最终使用 ndk build cmd 构
  • Linux 获取开机以来的系统时间

    我需要找到系统时间 因为我的 C 代码中的 Linux 机器已通电 time 和 gettimeofday 等函数返回自纪元以来的时间 而不是开机以来的时间 如何查找自开机以来的时间或时钟滴答数 提前致谢 该信息是通过以下方式提供的 pro
  • 清单中的 Android 抽象活动

    对于我的应用程序 我将创建各种扩展 android app Activity 和 android app Service 类的抽象类 当我对抽象类进行子类化时 如何将它们添加到 Android 清单中 我是否需要将抽象类和我的子类都添加到清
  • 使用 Jsoup 获取网页元素

    我正在尝试使用Jsoup从名为 Morningstar 的网站获取股票数据 我查看了其他论坛 但无法找出问题所在 我正在尝试进行更高级的数据报废 但我似乎甚至无法获得价格 我要么返回 null 要么什么也没有返回 我知道其他语言和 API
  • Doctrine – 如何在两个实体之间建立一对一的关系

    我有两个表 用户和联系人 Users id username Contacts id user id 电子邮件 我简化了结构 那么 如何正确设置条令实体呢 ORM Entity ORM Table name users class User
  • 从sql server 2005迁移到2008对应用程序的影响

    我们正在将 ASP NET Web 应用程序的后端从 sql server 2005 升级到 sql server 2008 或 2012 您能告诉我这对整个应用程序有什么影响吗 所有这些改变我们都必须做一次彻底成功的转型 我们也在考虑将前
  • 如何正确扩展WCF返回的类?

    我在我的项目中使用 WCF 服务 该服务返回一个名为 Store 的类 我创建了一个继承自 Store 的新本地类 我的课程名为 ExtendedStore 我的 ExtendedStore 看起来像这样 class ExtendedSto
  • 仅在 Linux 上通过命令行将 xlsx 转换为文本 CSV [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 简单的问题 目前是否可以从命令行调用 LibreOffice 以打开 xlsx 并将其转换 另存为 csv 或者 如果这是不可能的 当前通过命令行执行
  • 使用 Javascript 生成 SVG 路径的库?

    我在用着Rapha l http raphaeljs com 满足我的 SVG 渲染需求 但我发现 Path 语法有点低级 那么有谁知道一个很好的 Javascript 包装器 库 它允许这样的事情 var pathStr move 10
  • 指针条件 while(*s1++=*s2++)

    int main char str1 Overflow char str2 Stack char s1 str1 s2 str2 while s1 s2 printf s str1 return 0 当这个条件被打破时 while s1 s
  • Python 并行计算 - Scoop

    我正在尝试熟悉 Scoop 库 此处的文档 https media readthedocs org pdf scoop 0 7 scoop pdf https media readthedocs org pdf scoop 0 7 scoo
  • ASP.NET 代码隐藏类中的静态方法是非线程安全的吗?

    我可以用吗static我的 ASP NET 中的方法Pages and UserControls如果类不使用任何实例成员 IE protected void gridView PageIndexChanging object sender
  • ggplot 未绘制正确的颜色[重复]

    这个问题在这里已经有答案了 gb lt read csv results gradient boosting csv p lt ggplot gb geom point aes x pred y y alpha 0 4 fill darkg
  • 本地 Laradock Nginx 项目上的 SSL 证书

    我需要你的帮助来在我的本地计算机上使用 Nginx 和 SSL 假 证书设置我的 Laradock 带有 Docker 我不知道如何设置它 请你帮助我好吗 Thanks 要使用当前版本的 laradock 截至 2019 年 11 月 使用
  • Ruby 连接字符串并添加空格

    我有 4 个字符串变量name quest favorite color speed那可能是空的 我想将它们连接在一起 在非空的之间添加空格 代码的简单性 即查看和理解的简单程度 比速度更重要 So name Tim quest destr
  • 如何在 CUDA 内核启动之间使用共享内存?

    我想在同一内核的多次启动中使用共享内存中的值 我可以这样做吗 不 你不能 共享内存具有线程块生命周期 存储在其中的变量可以被属于一组的所有线程访问 global 函数调用
  • 如何获取 Quartz 用于描边 NSBezierPath 的路径

    我使用这段代码用一条宽的黑色虚线来描画 NSBezierPath c and strForBezier在其他地方定义 NSGlyph glyph for n 0 n lt len n glyph font glyphWithName str