找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 98|回复: 7
打印 上一主题 下一主题

求助:文字转shape

[复制链接]

5

主题

66

帖子

438

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
438
跳转到指定楼层
1#
发表于 2018-4-10 20:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
因为文字的Bbox比文字本身要大一些。所以想把文字转为shape再去比较文字和文字以及文字和其他东西有没有重叠。
之前在网上看到过大神提供的思路:先用axlText2Lines ,再用axlPolyFromDB,最后用axlDBCreateShape,但是我试了一下午都没有成功。有高手可以帮忙看看吗?或者有其他更好的办法不。我的最终目的是要判断文字和文字、焊盘、零件外框之类的有没有重叠。感谢感谢~~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

15

主题

112

帖子

672

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
672
8#
发表于 2018-4-11 16:29 | 只看该作者
chengcheng123 发表于 2018-4-11 16:19
试了,很好哦,非常非常感谢您

检查文字是否与焊盘重叠,可以用axlPolyOperation(tPoly pPoly 'And)判断

5

主题

66

帖子

438

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
438
7#
 楼主| 发表于 2018-4-11 16:20 | 只看该作者
jordanli22 发表于 2018-4-11 09:32
axlCmdRegister("c2s" 'LCB_cline_to_shape ?cmdType "interactive"
?doneCmd 'LCB_Done ?cancelCmd 'LCB ...

改天再来研究下你这个。感谢Jordan童鞋~~

5

主题

66

帖子

438

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
438
6#
 楼主| 发表于 2018-4-11 16:19 | 只看该作者
leilei4908 发表于 2018-4-11 10:47
lines = axlText2Lines(text)
paths = foreach(mapcan x lines x)
tPolys = nil

试了,很好哦,非常非常感谢您

点评

检查文字是否与焊盘重叠,可以用axlPolyOperation(tPoly pPoly 'And)判断  详情 回复 发表于 2018-4-11 16:29

15

主题

112

帖子

672

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
672
5#
发表于 2018-4-11 10:48 | 只看该作者
本帖最后由 leilei4908 于 2018-4-11 10:51 编辑
jordanli22 发表于 2018-4-11 09:32
axlCmdRegister("c2s" 'LCB_cline_to_shape ?cmdType "interactive"
?doneCmd 'LCB_Done ?cancelCmd 'LCB ...


楼主要的是文字转图形,不是铜线转图形

15

主题

112

帖子

672

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
672
4#
发表于 2018-4-11 10:47 | 只看该作者
本帖最后由 leilei4908 于 2018-4-11 10:49 编辑

lines = axlText2Lines(text)
paths = foreach(mapcan x lines x)
tPolys = nil
foreach(path paths
      polys = axlPolyFromDB(path ?endCapType 'ROUND ?line2poly t)
      foreach(poly polys
             tPolys = axlPolyOperation(tPolys poly 'OR)
      )
)
unless(listp(tPolys) tPolys = list(tPolys))
foreach(tPoly tPolys
      axlDBCreateShape(tPoly t "BOARD GEOMETRY/SILKSCREEN_TOP")
)
这个方式仅限于16.6及以上版本使用

点评

试了,很好哦,非常非常感谢您  详情 回复 发表于 2018-4-11 16:19

57

主题

379

帖子

1399

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1399
3#
发表于 2018-4-11 09:34 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

57

主题

379

帖子

1399

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1399
2#
发表于 2018-4-11 09:32 | 只看该作者
axlCmdRegister("c2s" 'LCB_cline_to_shape ?cmdType "interactive"
?doneCmd 'LCB_Done ?cancelCmd 'LCB_Cancel)
axlSetFunckey("cts" "c2sXXX")
procedure(LCB_cline_to_shape()
let( ()
axlSetFindFilter(?enabled list("noall" "clines" "lines" )
                  ?onButtons list("noall" "clines" "lines"))
LCBpopup = axlUIPopupDefine( nil (list
    (list "Undo" 'LCB_unDo)
    (list "Done" 'LCB_Done)
    (list "Cancel" 'LCB_Cancel)
     ))
axlUIPopupSet(LCBpopup)

LCB_mark = axlDBTransactionStart()
notdone = t
while(notdone
  lclines = axlGetSelSet(axlSelect(?prompt "Select Clines to convert to a shape."))
  if(lclines then
    foreach(clinedbid lclines
      ;layer = "etch/bottom"
      layer = car(axlGetSelSet())->layer
       polydbid = axlPolyFromDB(clinedbid ?endCapType "ROUND")
       if(polydbid then
        ;axlDeleteObject(clinedbid)
        if(! axlDBCreateShape(car(polydbid) t layer)  then
          axlUIWPrint(nil "** Error. Failed to create Shape from Cline. **")
        ); endif
        if(cadr(polydbid) then
            axlDBCreateShape(cadr(polydbid) t layer)  )
       else
        axlUIWPrint(nil "** Error. Failed to create Polydbid from Cline. **")
       ); endif
    ); end foreach cline
  ); endif
); end while
axlDBTransactionCommit(LCB_mark)

)); let and procedure

procedure(LCB_unDo()
let( ()
  if(! axlDBTransactionOops(LCB_mark) then
    axlUIWPrint(nil "-- Nothing Left To Undo. --")
  else
    axlUIWPrint(nil "-- Replacing Clines. --")
  ); endif
  axlClearSelSet()
)); end let procedure

procedure(LCB_Cancel()
let( ()
  axlUIWPrint(nil "** Cancelled Program. **")
  ;axlDBTransactionRollback(LCB_mark)
  notdone = nil
  axlClearSelSet()
  axlCancelEnterFun()

)); end let procedure

procedure(LCB_Done()
let( ()
  axlUIWPrint(nil "- Done -")
  axlDBTransactionCommit(LCB_mark)
  notdone = nil
  axlCancelEnterFun()
   
)); end let and procedure

点评

改天再来研究下你这个。感谢Jordan童鞋~~  详情 回复 发表于 2018-4-11 16:20
楼主要的是文件转图形,不是铜线转图形  详情 回复 发表于 2018-4-11 10:48
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-26 19:21 , Processed in 0.061575 second(s), 35 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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