QQ登录

只需一步,快速开始

查看: 1730|回复: 6
收起左侧

CorelDRAW VBA 简单代码实现绘制盒子

[复制链接]
累计签到:75 天
连续签到:1 天
发表于 2023-8-6 11:37:40 | 显示全部楼层 |阅读模式

前两天在本论坛看到网友,问怎么绘制如下图简单的封套盒子。
所以有了思路,就动手写了代码

CorelDRAW VBA 简单代码实现绘制盒子{tag}(1)


代码中的公式,不用初中知识应该就可以理解的。
就是计算几个矩形多大,绘制4条线,把线移动到正确的位置
  1. Public Function Simple_box_one()
  2.   ActiveDocument.Unit = CDRMillimeter
  3.   l = 100: w = 50: h = 70: b = 15
  4.   boxL = 2 * l + 2 * w + b
  5.   boxH = h
  6.   l1x = w
  7.   l2x = w + l
  8.   l3x = 2 * w + l
  9.   l4x = 2 * (w + l)
  10.   
  11.   Set Rect = ActiveLayer.CreateRectangle(0, 0, boxL, boxH)
  12.   Set sl1 = DrawLine(l1x, 0, l1x, h)
  13.   Set sl2 = DrawLine(l2x, 0, l2x, h)
  14.   Set sl3 = DrawLine(l3x, 0, l3x, h)
  15.   Set sl4 = DrawLine(l4x, 0, l4x, h)
  16. End Function
复制代码



CorelDRAW VBA 简单代码实现绘制盒子{tag}(2)

  1. Public Function Simple_box_two()
  2.   ActiveDocument.Unit = cdrMillimeter
  3.   l = 100: w = 50: h = 70: b = 15
  4.   boxL = 2 * l + 2 * w + b: boxH = h
  5.   l1x = w: l2x = w + l: l3x = 2 * w + l: l4x = 2 * (w + l)
  6.   
  7.   Set mAInRect = ActiveLayer.CreateRectangle(0, 0, boxL, boxH)
  8.   
  9.   Set topRect = ActiveLayer.CreateRectangle(0, 0, l, w)
  10.   topRect.Move l1x, h
  11.   Set bottomRect = ActiveLayer.CreateRectangle(0, 0, l, w)
  12.   bottomRect.Move l3x, -w
  13.   
  14.   Set sl1 = DrawLine(l1x, 0, l1x, h)
  15.   Set sl2 = DrawLine(l2x, 0, l2x, h)
  16.   Set sl3 = DrawLine(l3x, 0, l3x, h)
  17.   Set sl4 = DrawLine(l4x, 0, l4x, h)
  18. End Function
复制代码
绘制线条的代码写成函数调用,可以设置颜色或者粗细
  1. '// 画一条线,设置轮廓色 M100
  2. Private Function DrawLine(X1, Y1, X2, Y2) As Shape
  3.   Set DrawLine = ActiveLayer.CreateLineSegment(X1, Y1, X2, Y2)
  4.   DrawLine.Outline.SetProperties Color:=CreateCMYKColor(0, 100, 0, 0)
  5. End Function
复制代码


华印网相关搜索

2 赠人玫瑰,手有余香!如单纯感谢,请送花!凡是以文字形式感谢,即被视为水帖,会扣币处理! 鲜花榜单
累计签到:75 天
连续签到:1 天
 楼主| 发表于 2023-8-7 08:35:26 | 显示全部楼层
本帖最后由 landboy 于 2023-8-7 08:44 编辑

圆角插口和翅膀的代码


建立圆角矩形函数 CreateRectangle(0, 0, l, b, 50, 50) ,第5-6参数,指定上2圆角的系数

翅膀是个自定义多节点曲线,先用矩形函数,绘制一个临时物件s 确定范围大小

然后定义 DrawWing(s As Shape) 函数来手工绘制,如图

sp.AppendLineSegment 4, y - 2.5  '// 绘制直线
sp.AppendCurveSegment2 6.5, y, 4.1, y - 1.25, 5.1, y  '// 绘制曲线




CorelDRAW VBA 简单代码实现绘制盒子{tag}(3)


下面是绘制整个盒子完整的代码

  1. Public Function Simple_box_three()
  2.   ActiveDocument.Unit = cdrMillimeter
  3.   Dim sr As New ShapeRange, wing As New ShapeRange
  4.   Dim sh As Shape
  5.   l = 100: w = 50: h = 70: b = 15
  6.   boxL = 2 * l + 2 * w + b: boxH = h
  7.   l1x = w: l2x = w + l: l3x = 2 * w + l: l4x = 2 * (w + l)
  8.   
  9.   '// 绘制主体上下盖矩形
  10.   Set mainRect = ActiveLayer.CreateRectangle(0, 0, boxL, boxH)
  11.   Set topRect = ActiveLayer.CreateRectangle(0, 0, l, w)
  12.   topRect.Move l1x, h
  13.   Set bottomRect = ActiveLayer.CreateRectangle(0, 0, l, w)
  14.   bottomRect.Move l3x, -w
  15.   
  16.   '// 绘制Box 圆角矩形插口
  17.   Set top_RoundRect = ActiveLayer.CreateRectangle(0, 0, l, b, 50, 50)
  18.   top_RoundRect.Move l1x, h + w
  19.   Set bottom_RoundRect = ActiveLayer.CreateRectangle(0, 0, l, b, 0, 0, 50, 50)
  20.   bottom_RoundRect.Move l3x, -w - b
  21.    
  22.   '// 绘制box 四个翅膀
  23.   Set sh = DrawWing(ActiveLayer.CreateRectangle(0, 0, w, (w + b) / 2 - 2))
  24.   wing.Add sh.Duplicate(0, h)
  25.   wing.Add sh.Duplicate(l2x, h)
  26.   wing.Add sh.Duplicate(0, -sh.SizeHeight)
  27.   wing.Add sh.Duplicate(l2x, -sh.SizeHeight)
  28.   wing(2).Flip cdrFlipHorizontal
  29.   wing(3).Flip cdrFlipVertical
  30.   wing(4).Rotate 180

  31.   '// 添加到物件组,设置轮廓色 C100
  32.   sr.Add mainRect: sr.Add topRect: sr.Add bottomRect
  33.   sr.Add top_RoundRect: sr.Add bottom_RoundRect
  34.   sr.AddRange wing: sh.Delete
  35.   sr.SetOutlineProperties Color:=CreateCMYKColor(100, 0, 0, 0)
  36.   
  37.   '// 绘制尺寸刀痕线
  38.   Set sl1 = DrawLine(l1x, 0, l1x, h)
  39.   Set sl2 = DrawLine(l2x, 0, l2x, h)
  40.   Set sl3 = DrawLine(l3x, 0, l3x, h)
  41.   Set sl4 = DrawLine(l4x, 0, l4x, h)
  42.   
  43.   '// 盒子box 群组
  44.   sr.Add sl1: sr.Add sl2: sr.Add sl3: sr.Add sl4
  45.   sr.CreateSelection: sr.Group
  46.   
  47. End Function

  48. '// 画一条线,设置轮廓色 M100
  49. Private Function DrawLine(X1, Y1, X2, Y2) As Shape
  50.   Set DrawLine = ActiveLayer.CreateLineSegment(X1, Y1, X2, Y2)
  51.   DrawLine.Outline.SetProperties Color:=CreateCMYKColor(0, 100, 0, 0)
  52. End Function


  53. Private Function DrawWing(s As Shape) As Shape
  54.     Dim sp As SubPath, crv As Curve
  55.     Dim x As Double, y As Double
  56.     x = s.SizeWidth: y = s.SizeHeight
  57.     s.Delete
  58.    
  59.     '// 绘制 Box 翅膀 Wing
  60.     Set crv = Application.CreateCurve(ActiveDocument)
  61.     Set sp = crv.CreateSubPath(0, 0)
  62.     sp.AppendLineSegment 0, 4
  63.     sp.AppendLineSegment 2, 6
  64.     sp.AppendLineSegment 4, y - 2.5
  65.     sp.AppendCurveSegment2 6.5, y, 4.1, y - 1.25, 5.1, y
  66.     sp.AppendLineSegment x - 2, y
  67.     sp.AppendLineSegment x - 2, 3
  68.     sp.AppendLineSegment x, 0
  69.    
  70.     sp.Closed = True
  71.     Set DrawWing = ActiveLayer.CreateCurve(crv)
  72. End Function
复制代码

最后在窗口空间中添加一个图片当按钮

  1. Private Sub MakeBox_Click()
  2.   box.Simple_box_three
  3. End Sub
复制代码


CorelDRAW VBA 简单代码实现绘制盒子{tag}(4)
回复 支持 反对 送花

使用道具 举报

累计签到:208 天
连续签到:1 天
发表于 2023-8-6 11:54:44 | 显示全部楼层
学习是好的 应用就没必要了 因为优秀的很多
有空是不是可以研究下这种
更多图片 小图 大图
组图打开中,请稍候......
回复 支持 反对 送花

使用道具 举报

累计签到:1473 天
连续签到:25 天
发表于 2023-8-6 18:52:50 | 显示全部楼层
stehong 发表于 2023-8-6 11:54
学习是好的 应用就没必要了 因为优秀的很多
有空是不是可以研究下这种

这种应该去找做刀模的人做吧,这边大多是做平面设计的,应该不会有人知道做刀模的施工参数。只是照猫画虎的,画出来该加的地方没加,该减的地方没减,那不是无用功了。
回复 支持 反对 送花

使用道具 举报

头像被屏蔽
累计签到:11 天
连续签到:9 天
发表于 2023-8-6 18:59:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对 送花

使用道具 举报

累计签到:75 天
连续签到:1 天
 楼主| 发表于 2023-8-7 08:46:30 | 显示全部楼层
stehong 发表于 2023-8-6 11:54
学习是好的 应用就没必要了 因为优秀的很多
有空是不是可以研究下这种

所以, 你可以参考 这个,
制作你想要的盒子插件
CorelDRAW VBA 简单代码实现绘制盒子{tag}(5)
                               
登录/注册后可看大图
回复 支持 反对 送花

使用道具 举报

累计签到:208 天
连续签到:1 天
发表于 2023-8-7 08:57:49 | 显示全部楼层
jiangyu 发表于 2023-8-6 18:52
这种应该去找做刀模的人做吧,这边大多是做平面设计的,应该不会有人知道做刀模的施工参数。只是照猫画虎 ...

一般都是比画个尺寸样式出来再交给做刀模的做
回复 支持 反对 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

注意注意注意:必看上一条 /1 下一条

华印网 - 华印社区
Share More 周一至周日:09:00 - 21:00
华印网旗下的设计印刷制作类专业技术站点
请勿发布违反国家法律法规的内容,会员观点不代表本站立场
企鹅群号:119572101

华印网汇集印前印后技术、PDF拼版、防伪包装、数码印刷、合版印刷、图文设计、平面设计、数码印刷及CTP等最新印刷技术,提供软件汉化、插件汉化、cdr插件、ai插件、ps插件、pdf插件、印刷流程、ctp输出、印刷软件、印能捷、esko、CorelDRAW、InDesign、Illustrator、CTP、CDR以及PDF软件下载的综合性印刷论坛社区!

Powered by Discuz! X3.4 © 2001-2021,Tencent Cloud.

站点地图|小黑屋|手机版|Archiver|华印 ( 粤ICP备19020152号-1 )

GMT+8, 2024-4-28 07:08 , Processed in 0.035937 second(s), 30 queries , Gzip On, Yac On.

快速回复 返回顶部 返回列表