|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
为什么总是提示选择器件出问题?
axlCmdRegister("autoplace" 'arrange_components_in_box ?cmdType "sub_cmd")
axlSetFunckey("m" "autoplace" t)
procedure(arrange_components_in_box()
let((selected_comps box_coords place_box min_x min_y max_x max_y comp_width comp_height i j x_step y_step)
;;获取用户选择的器件
axlClearSelSet()
axlSetFindFilter( ?enabled '("NOALL" "components")
?onButtons '("components")
)
selected_comps = axlGetSelSet()
;; 如果没有选中器件,提示用户
when(!selected_comps
error("please slect components")
)
;;获取用户画的方框 (可以通过用户交互或者预设方式)
place_box = axlEnterBox()
;;方框的四个角坐标
min_x = car(car(place_box))
min_y = cadr(car(place_box))
max_x = car(cadr(place_box))
max_y = cadr(cadr(place_box))
;;计算方框内的可用宽度和高度
box_width = max_x - min_x
box_height = max_y - min_y
;;计算每个器件的宽度和高度 (使用placebound区域)
comp_width = 0
comp_height = 0
foreach(comp selected_comps
;;获取器件的placebound边界
bound_box = axlDBGetBoundingBox(comp)
comp_width = max(comp_width, car(cadr(bound_box)) - car(car(bound_box)))
comp_height = max(comp_height, cadr(cadr(bound_box)) - cadr(car(bound_box)))
)
;;计算排列间距
x_step = comp_width + 100
y_step = comp_height + 100
;;将器件按顺序排列在方框内
i = 0
j = 0
foreach(comp selected_comps
;;计算新位置
new_x = min_x + i * x_step
new_y = max_y - j * y_step
;;如果超出方框宽度,则换行
when(new_x + comp_width > max_x
i = 0
j = j + 1
new_x = min_x
new_y = max_y - j * y_step
)
;;移动器件到新位置
axlTransformDB(comp, list(new_x, new_y))
;; 更新排列索引
i = i + 1
)
)
)
|
|