|
回复 deargds 的帖子
移动ref到元件中心 这个命令在allegro里可以用,但是在apd 和sip中不还使,错误提示是can‘t find place_bound!
在网上找到一个叫mcenter的skill,他在allegro、apd、sip都能正确执行,可以把移动旋转用一个命令完成,且修正了因为文字的对其方式不同造成的偏差问题。
下面是人家的原代码(好东西是要共享的):
; Ref Place To Symbole Center and AotoRotate
; Author: Langexie
; Version: 1.00
; Date: 2010/06/07
axlCmdRegister("mcenter" 'move_ref_center)
procedure( move_ref_center()
popup = axlUIPopupDefine(nil list(list("Done" `axlFinishEnterFun)))
axlUIPopupSet(popup)
axlClearSelSet()
axlSetFindFilter( ?enabled list( "noall" "text") ?onButtons list( "noall" "text"))
(while (axlSelect)
alltexts = axlGetSelSet()
axlClearSelSet()
foreach(texts alltexts
sym = texts -> parent
when( sym
when( and(texts -> text == sym -> component -> name)
comps_bbox = axlDBAltOrigin('center sym)
comps_center_x = xCoord(comps_bbox)
comps_center_y = yCoord(comps_bbox)
comps_angle = sym -> rotation
text_angle_a = texts -> rotation
r_angle = comps_angle - text_angle_a
axlTransformObject(texts , ?angle r_angle)
text_angle_b = texts -> rotation
when(90<=text_angle_b && text_angle_b<270
axlTransformObject(texts , ?angle 180)
)
text_angle_c = texts -> rotation
text_center_bbox = axlDBAltOrigin('center texts)
excursion = axlGetParam(strcat("paramTextBlock:" texts->textBlock))->height
when(0<text_angle_c && text_angle_c<90
text_center_x = xCoord(text_center_bbox)
text_center_y = yCoord(text_center_bbox)
text_angle_d = text_angle_c
m_x = comps_center_x - text_center_x + 0.15 * excursion * sin(3.14159/180 * text_angle_d)
m_y = comps_center_y - text_center_y - 0.15 * excursion* cos(3.14159/180 * text_angle_d)
)
when(270<=text_angle_c && text_angle_c<360 || text_angle_c == 0
text_center_x = xCoord(text_center_bbox)
text_center_y = yCoord(text_center_bbox)
text_angle_d = 360 - text_angle_c
m_x = comps_center_x - text_center_x - 0.15 * excursion * sin(3.14159/180 * text_angle_d)
m_y = comps_center_y - text_center_y - 0.15 * excursion * cos(3.14159/180 * text_angle_d)
)
axlTransformObject(texts , ?move list(m_x ,m_y) )
))
);end foreach
);end while
);end
);end |
|