gpt4 book ai didi

ios - 如何获取在CGPath的CGContextSetLineDash之后创建的每个虚线的最后一点

转载 作者:行者123 更新时间:2023-12-01 17:25:50 25 4
gpt4 key购买 nike

我将路径转换为虚线以获取CGPATH的多个段。

float dash[2]={20 ,1}; 
int index =0;
CGContextSetLineDash(context,0,dash,2);
CGContextReplacePathWithStrokedPath(context);
dashedpath = CGContextCopyPath(context);
CGPathApply(dashedpath, &thepobj, visitdashedpath);

在visitdashedpath中,我试图找到上一条(每条)虚线的终点。
void visitdashedpath(void* info, const CGPathElement* element)
{
int nPoints;
pathObj * dasharray = (pathObj *)info;
switch (element->type)
{
case kCGPathElementMoveToPoint:
dasharray[index-1].endpoint = CGPathGetCurrentPoint(dasharray[index-1].path); [my-option1]
dasharray[index].path = CGPathCreateMutable ();
break;

case kCGPathElementAddLineToPoint:

CGPathAddLineToPoint(dasharray[index].path,NULL,element->points[0].x,element->points[0].y);
dasharray[index].endpoint = CGPathGetCurrentPoint(dasharray[index].path);//[my-option1]

brek;
case kCGPathElementAddcurve:
CGPathAddCurveToPoint(path,c1.x,c1.y,c2.x,c2.y,c3.x,c3.y);
----

我想通过处理完成的虚线来了解最后一点的坐标(dasharray [index-1] .endpoint)
我尝试了CGPathGetCurrentPoint,但是它给出了虚线的起点。
我想每条虚线都是由CGContextCopyPath制成的闭合路径。也许这就是为什么我将终点作为起点。

最佳答案

您错过了CGContextReplacePathWithStrokedPathCGPathCreateCopyByStrokingPath的工作重点:

创建新路径后,填充它会产生与抚摸原始路径相同的像素。

那么,如何为直线或曲线创建可填充路径?

大概是这样的:

  • moveto
  • curveto(外部或内部弯曲边缘)
  • lineto(一端)
  • curveto(内部或外部弯曲边缘)
  • closepath(另一端)

  • closepath当然会将当前点返回到步骤1( moveto)开始的位置。这就是为什么您得到的结果。

    您开始使用的原始点不再存在于此路径中。的确,根据曲线的长度,破折号可能意味着没有任何一个片段与您的最终点重叠-最后一个片段可能达不到它。

    如果要每个段的起点和终点,请获取 lineto之前和之后的当前点,并取平均值,并对 closepath之前和之后的当前点进行相同的处理。您从中获得的两个点是路径的每个直线元素的中间,对于简单的曲线线段,它将是该线段的起点和终点。

    希望您的路径没有任何循环。

    关于ios - 如何获取在CGPath的CGContextSetLineDash之后创建的每个虚线的最后一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20778459/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com