码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • python二次开发CATIA:文字轮廓草图


    CATIA V5 版本的草图中,并没有文字轮廓的创建命令。通常的做法是,再Drawing 文件中创建所需文本-->将 Drawing 文件另存为 dwg / dxf 格式-->打开另存的文件,文字已转为轮廓线条-->复制线条并粘贴到草图中。

    本例中,基于 opencv 和 pillow两个库,先通过 PIL 将目标文字写到一张空白的图片中,然后再通过 opencv 的findContours 方法,提取该图片中的图形轮廓,最后提取轮廓中的坐标信息,并在CATIA 草图中绘制出相应的轮廓线条。
     

    1. import win32com.client
    2. import pywintypes # 导入pywintypes模块
    3. # 启动CATIA应用
    4. catia = win32com.client.Dispatch('CATIA.Application')
    5. catia.visible=1
    6. # 输入文字并转码
    7. text=input('请输入文字:\n')
    8. str = text.encode('utf8').decode('utf8')
    9. # 字体大小与颜色
    10. fontsize=100
    11. fontcolor=(0,0,0)
    12. # 导入所需的库
    13. from PIL import Image, ImageDraw, ImageFont
    14. # 创建一张白背景图片,尺寸根据输入文字数量自动确定
    15. img_PIL=Image.new('RGBA',(100*len(str)+10,110),'white')
    16. draw = ImageDraw.Draw(img_PIL)
    17. # 设置文字属性
    18. font = ImageFont.truetype('simkai.ttf', fontsize) #字体与字号
    19. fillColor = fontcolor # 字体颜色
    20. position = (5, 5) # 文字位置,距左/上
    21. # 把字写写到图片上
    22. draw.text(position, str, font=font, fill=fillColor)
    23. import cv2
    24. import numpy as np
    25. frame = cv2.cvtColor(np.asarray(img_PIL),
    26. cv2.COLOR_RGB2BGR) # 转成OpenCV格式
    27. # cv2.imshow('result',frame)
    28. # cv2.waitKey()
    29. # 将图像转换成灰度图像,并执行图像高斯模糊,以及转化成二值图像
    30. gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    31. # blurred = cv2.GaussianBlur(gray, (1,1), 0)
    32. ret,image_binary = cv2.threshold(gray,
    33. 127,
    34. 255,
    35. cv2.THRESH_BINARY)
    36. # cv2.imshow('result',image_binary)
    37. # cv2.waitKey()
    38. # 从二值图像中提取轮廓
    39. # contours中包含检测到的所有轮廓,以及每个轮廓的坐标点
    40. contours = cv2.findContours(image_binary.copy(),
    41. cv2.RETR_TREE,
    42. cv2.CHAIN_APPROX_TC89_KCOS)[0]
    43. # 将轮廓画在图像上并显示
    44. cv2.drawContours(frame,contours,-1,(0,0,255),1)
    45. try:
    46. doc = catia.activedocument
    47. sel = doc.selection
    48. part = doc.part
    49. sketch = part.inworkobject
    50. f2d = sketch.factory2d
    51. catia.refreshdisplay = False
    52. catia.HSOSynchronized = False
    53. for i in range(1, len(contours)):
    54. c = contours[i]
    55. for j in range(0, len(c) - 1):
    56. if j < len(c) - 2:
    57. pt1 = c[j][0]
    58. pt2 = c[j + 1][0]
    59. else:
    60. pt1 = c[j][0]
    61. pt2 = c[0][0]
    62. # print(pt1,pt2)
    63. ln = f2d.createline(pt1[0] - 5,
    64. -pt1[1] + fontsize + 5,
    65. pt2[0] - 5,
    66. -pt2[1] + fontsize + 5)
    67. catia.refreshdisplay = True
    68. catia.HSOSynchronized = True
    69. except pywintypes.com_error as e:
    70. # 如果出现错误,可能是因为没有活动文档
    71. print("无法获取活动文档,请确保CATIA应用程序中已有打开的文档。")
    72. print(e)

  • 相关阅读:
    软件测试面试题及答案 这个在线题库的多种刷题模式能帮你快速通关
    YOLOv1 沉思录
    【工程应用九】再谈基于离散夹角余弦相似度指标的形状匹配优化(十六角度量化+指令集加速+目标只有部分在图像内的识别+最小外接矩形识别重叠等)
    Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置
    Asp .Net Core 系列:集成 Refit 和 RestEase 声明式 HTTP 客户端库
    数学建模笔记(四):初等模型
    数据库指令合集(持续更新中)
    Docker容器互联:实现多容器通信
    Android移动应用开发之使用异步调用进度条及实现幻灯片切换效果
    Spring注解RequestBody与RequestParam详解
  • 原文地址:https://blog.csdn.net/T20151470/article/details/133517205
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号