找回密码
 注册
查看: 359|回复: 9
打印 上一主题 下一主题

我想实现把框选区域里的器件摆在一个手绘的矩形框里

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-9-10 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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
        )
    )
)

该用户从未签到

2#
 楼主| 发表于 2024-9-10 16:36 | 只看该作者
执行后就提示:*Error* please slect components
但是选中择器件也不行

该用户从未签到

3#
 楼主| 发表于 2024-9-10 17:56 | 只看该作者
另外axlDBGetBoundingBox这个函数也提示不存在
  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    4#
    发表于 2024-9-10 18:00 | 只看该作者
    多翻翻HELP,不仅axlDBGetBoundingBox没有,axlTransformDB也没有吧。

    点评

    那应该是virtuoso里的了,不过按照这个思路找一下allegro这边的应该可以搞一下  详情 回复 发表于 2024-9-10 19:21

    该用户从未签到

    5#
     楼主| 发表于 2024-9-10 19:21 | 只看该作者
    db-_- 发表于 2024-9-10 18:00
    多翻翻HELP,不仅axlDBGetBoundingBox没有,axlTransformDB也没有吧。

    那应该是virtuoso里的了,不过按照这个思路找一下allegro这边的应该可以搞一下

    点评

    思路看着不错,替代一下基本就行了。  发表于 2024-9-11 09:55
    头像被屏蔽
  • TA的每日心情
    开心
    2025-1-23 15:05
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    6#
    发表于 2024-9-12 04:06 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽

    该用户从未签到

    7#
     楼主| 发表于 2024-9-17 09:35 | 只看该作者
    aarom 发表于 2024-9-12 04:06
    功力太弱,

    只看出開頭的 selected_comps = axlGetSelSet() 位置錯了.

    嗯嗯,不错,看来有一定功力
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-5-28 22:06 , Processed in 0.093750 second(s), 24 queries , Gzip On.

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

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

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