|  | 
| 回复 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
 | 
 |