TA的每日心情 | 郁闷 2024-7-25 15:18 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
- /*
- By4311
- 240908
- 用于PDF原理图,PDF中框选复制器件文本信息,在设计中使用~1抓取
- 历史更新:
- 2025.03.18
- 新增某些位号重叠被合并为一个字符串时也会抓取
- */
- axlSetFunckey("~1" "By4311_GrabClipboardSymbol")
- axlCmdRegister("By4311_GrabClipboardSymbol" 'By4311_Main_GrabClipboardSymbol)
- (procedure By4311_FindSymbol()
- axlZoomToDbid(car(axlSelectByName("REFDES" axlUIPrompt("Find Symbol Name:"))) t)
- )
- (procedure By4311_Main_GrabClipboardSymbol()
- ;器件位号前缀合集
- Pre = list("U" "R" "C" "L")
- ;字符前缀
- Regular = "[A-Za-z0-9_+-=.]+"
- By4311_GetClipboardSymbol()
- By4311_GrabClipboardSymbol(GrabList)
- )
- (procedure By4311_GetClipboardSymbol()
- axlUIConfirmEx( "Use This Command At Your Own Risk." "By4311_GrabClipboardSymbol")
- let( (P)
- ;清除选择集,设置过滤器
- axlClearSelSet()
- Filter = list("NoAll" "Symbols")
- axlSetFindFilter(?enabled Filter ?onButtons cdr(Filter))
- ;获得剪切板内容进行解析,转换为字符串链表
- TexList = axlClipboardGetText()
- TexList = buildString(parseString(TexList "\r") " ")
- TexList = buildString(parseString(TexList "\n") " ")
- TexList = parseString(TexList " ")
- Analysis = list()
- (foreach item Pre
- printf("\n%s :" item)
- New = rexMatchList(strcat(Regular item "[0-9]+") TexList)
- rexCompile(strcat(Regular item))
- (foreach otem New
- printf("%L\t" rexReplace(otem item 1))
- Analysis = cons(rexReplace(otem item 1) Analysis)
- )
- )
- GrabList = list()
- TexList = unique(append(TexList Analysis))
- ;在设计中查找链表包含的对象,放置到抓取合集中
- (foreach item TexList
- ID = car(axlSelectByName("REFDES" item))
- when( ID
- GrabList = cons(ID GrabList)
- ;printf("%L\n" car(P)->refdes)
- )
- )
- GrabList = unique(GrabList)
- )
- )
- (procedure By4311_GrabClipboardSymbol(TarList)
- let((Point item)
- (if TarList ;传入的链表;如果不为空则抓取,如果为空则提示
- then axlHighlightObject(TarList)
- item = axlDBAltOrigin('center car(TarList)) ;默认鼠标附着基准点为第一个元素的中心坐标
- axlDynamicsObject(TarList item) ;鼠标附着
- Point = axlEnterPoint(?prompts `("Please Click To Select The Point To Place...")) ;选择新位置
- axlDehighlightObject(TarList)
- (if Point
- then axlTransformObject(TarList ?move axlMXYSub(Point item)) ;整体移动
- else axlMsgPut("User Canceled Operation.");用户取消操作
- )
- axlClearDynamics();清除鼠标附着
- else
- axlMsgPut("Did Not Grab The Symbol.");没有抓取到有用的信息
- )
- )
- )
复制代码 |
|