- 精华
- 活跃值
-
- 积分
- 2911
- 违规
-
- 印币
-
- 鲜花值
-
- 在线时间
- 小时
累计签到:207 天 连续签到:5 天
|
先决条件: 搭建好编译环境,了解开放大概,可以先看 教程在本站的链接如下
零基础学 CorelDRAW CPG 插件开发教程-Part01 MSVC2022 编译环境
https://www.52cnp.com/thread-21975-1-1.html
零基础学 CorelDRAW CPG 插件开发教程-Part02 C++ 编程傻瓜入门
https://www.52cnp.com/thread-22629-1-1.html
零基础学 CorelDRAW CPG 插件开发教程-Part03 C++ 编程 绘制圆形和矩形
自然是本教程帖子, CDR插件绘制圆形和矩形_源码包.zip
CDR插件绘制圆形和矩形_源码包.zip
(120.13 KB, 售价: 99 印币)
定价 99 金币不过分吧
首先我们来看源码第一版: test 函数
- bool test(corel* cdr){
- cdr->ActiveDocument->Unit = cdrMillimeter;
- double x, y;
- // IVGShapePtr ActiveShape;
- auto s = cdr->ActiveShape;
复制代码
首先定义这个 测试函数,返回值为 bool逻辑真假,参数是 corel* cdr ,前面文章讲过 是一个全局指针,绑定到 CorelDRAW插件的app指针上,相当于从水管上接个龙头,可以自由调用 CDR的资源了。
再接下来 一行, 设置 代码中的文档档位为 mm, 定义 x,y 两个变量,可以去点的 坐标。
再使用 auto s 把 s 指向,文件中选择的物件中第一个物件。 使用 auto 是为了傻瓜,我们还是要清楚 IVGShapePtr ActiveShape; 是这个物件的定义,这里auto表示的类型是 IVGShapePtr ,是表示 Shape物件的指针。
你听懂了吗,如果不懂没事,反正就是 Ctrl +C +V 的事,直接用 auto就行了。
- for(auto i = 0; i < s->DisplayCurve->Nodes->Count; i++){
- auto n = s->DisplayCurve->Nodes->Item[i+1];
- x = n->PositionX;
- y = n->PositionY;
- printf("%f, %f\n", x, y);
- auto sy = cdr->ActiveLayer->CreateEllipse2(x, y, 5, ZERO_4PC);
- sy->Outline->Color->RGBAssign(255, 0, 0);
- auto sj = cdr->ActiveLayer->CreateRectangle2(x, y, 10, 10, ZERO_4PC);
- sj->Outline->Color->RGBAssign(0, 255, 0);
- sj->PutCenterX(x);
- sj->PutCenterY(y);
- }
复制代码
再来解读 正式的功能代码:
for 语句是基本所有编程语言都有的,使用循环来做批量的事情,我们这个代码就是遍历我们选择物件的所有节点,在所有节点位置处,画圆形标记,话矩形标记。
s-DisplayCurve-Nodes-Count 这个指针操作用来的得到 s物件的虚拟副本上所有节点的计数,如果你熟悉使用VBA使用类似的操作,你应该看的懂,如果你还不懂VBA里这样操作,当我没说。
接下来 auto n 就是定义一个临时变量 n 用来表示 节点 Node,分别绑定每一个节点。
再接下来,使用 x y 变量得到节点的坐标,使用 printf 打印出来了,我们这次写的控制台程序 app.exe 所以是可以显示后台的信息的。
auto sy = cdr-ActiveLayer-CreateEllipse2(x, y, 5, ZERO_4PC);
为了能验证我们的得到数据是否正确,所以,我就要在得到每个点上 画圆标记了。
如上图所示,我把 CreateEllipse2 这个绘制圆形的函数 也放到代码里,使用注释代码,方便学习这个函数的参数使用。
建立圆形函数原型: IVGShapePtr IVGLayer::CreateRectangle2 我们猜一猜 是在CDR图层上操作的,
所以使用时按 cdr-ActiveLayer-CreateEllipse2 ( ) 这样写,要加上当前层的指针。
括号中的参数,7个数字,我们只要前面三 x , y, 5,后面全填0好了。 数字 5 表示 圆半径, 后面4个0 我就用英文 #define ZERO_4PC 0, 0, 0, 0 替代了,不懂你可以问AI
auto sj = cdr-ActiveLayer-CreateRectangle2(x, y, 10, 10, ZERO_4PC); 的意思。
以下省略 1024字 ........
|
评分
-
参与人数 1 | 印币 +20 |
活跃值 +1 |
技术 +1 |
收起
理由
|
华印客服
| + 20 |
+ 1 |
+ 1 |
感谢分享与探讨,华印有你更精彩!. |
查看全部评分
1
赠人玫瑰,手有余香!如单纯感谢,请送花!凡是以文字形式感谢,即被视为水帖,会扣币处理!
鲜花榜单
-
+1
对你表示感谢!
|