找回密码
 注册
关于网站域名变更的通知
查看: 357|回复: 3
打印 上一主题 下一主题

移动ref丝印到器件中心,请教大神修改问题,附源码。

[复制链接]
  • TA的每日心情
    开心
    2025-9-30 15:38
  • 签到天数: 164 天

    [LV.7]常住居民III

    跳转到指定楼层
    #
     楼主| 发表于 2024-11-13 10:03 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    哪位大神给修改一下这个丝印居中的源码。谢谢。
    测试后有两个问题,一个是单点symbol 居中丝印不能实现到中心,字符最边上会自动识别到中心。二是bottom丝印无法实现垂直器件字符的正确方向。


    axlCmdRegister( "Move_refdes_to_body_center" 'RefDestoCenter ?cmdType "interactive" ?doneCmd  'ps_RefDestoCenterstop ?cancelCmd 'ps_RefDestoCenterstop )

    procedure( RefDestoCenter( )
            let(
                    ( lLayer_name
                            PI
                            ps_RefDestoCenter_From_file
                            ps_RefDestoCenter_From
                            sPackageLayer
                            bStop
                            lBlock
                            bSym
                            bLayer
                            lSym
                            lText
                            bText_status
                            dShape
                            dShape_temp
                            fDelta_y
                            fSym_center_x
                            fSym_center_y
                            fSym_left_x
                            fSym_left_y
                            fSym_right_x
                            fSym_right_y
                            fSym_x
                            fSym_y
                            fSym_xy
                            fText_rot
                            lShape
                            lSym_shape_box
                            rText_orient
                    )
                            PI = 3.1415926
                            bStop = t
                            lBlock                
                            lLayer_name = list( "Assembly Top" "Silkscreen Top" "Assembly Bottom" "Silkscreen Bottom" "Move All" )
           
                            ps_RefDestoCenter_From_file = strcat( axlTempDirectory() "./ps_RefDestoCenter_From.form" )
                
    ; create the Move RefDes To Body Center form
                                            ps_RefDestoCenter_From = outfile( ps_RefDestoCenter_From_file "w" )
                                      fprintf( ps_RefDestoCenter_From "FILE_TYPE=FORM_DEFN VERSION=2\n" )
                            fprintf( ps_RefDestoCenter_From "FORM\n" )
                            fprintf( ps_RefDestoCenter_From "FIXED\n" )
                            fprintf( ps_RefDestoCenter_From "PORT 29 20\n" )
                            fprintf( ps_RefDestoCenter_From "HEADER \"ps_RefDestoCenter\"\n" )
                   
                            fprintf( ps_RefDestoCenter_From "POPUP <select_layer_name_p>" )
                            fprintf( ps_RefDestoCenter_From "\"a\"\"a\"" )
                            fprintf( ps_RefDestoCenter_From "\n" )
                           
                            fprintf( ps_RefDestoCenter_From "TILE\n" )
           
                                      fprintf( ps_RefDestoCenter_From "TEXT \"Select visible layer:\"\n" )
                            fprintf( ps_RefDestoCenter_From "TLOC 2 1\n" )
                            fprintf( ps_RefDestoCenter_From "ENDTEXT\n" )       
                           
                             fprintf( ps_RefDestoCenter_From "FIELD select_layer_name\n" )
                            fprintf( ps_RefDestoCenter_From "FLOC 11 3\n" )
                            fprintf( ps_RefDestoCenter_From "ENUMSET 14\n" )
                            fprintf( ps_RefDestoCenter_From "POP \"select_layer_name_p\"\n" )
                            fprintf( ps_RefDestoCenter_From "ENDFIELD\n" )
           
                            fprintf( ps_RefDestoCenter_From "TEXT \"Move mode:\"\n" )
                            fprintf( ps_RefDestoCenter_From "TLOC 2 5\n" )
                            fprintf( ps_RefDestoCenter_From "ENDTEXT\n" )       
                           
                            fprintf( ps_RefDestoCenter_From "FIELD Layer_mode\n" )
                            fprintf( ps_RefDestoCenter_From "FLOC 11 5\n" )
                            fprintf( ps_RefDestoCenter_From "CHECKLIST \"By Layer\" \"radioLabel\"\n" )
                            fprintf( ps_RefDestoCenter_From "ENDFIELD\n" )
                           
                            fprintf( ps_RefDestoCenter_From "FIELD Sym_mode\n" )
                            fprintf( ps_RefDestoCenter_From "FLOC 11 7\n" )
                            fprintf( ps_RefDestoCenter_From "CHECKLIST \"By Symbol\" \"radioLabel\"\n" )
                            fprintf( ps_RefDestoCenter_From "ENDFIELD\n" )
                           
                            fprintf( ps_RefDestoCenter_From "FIELD aspcRun\n" )
                            fprintf( ps_RefDestoCenter_From "FLOC 16 9\n" )
                            fprintf( ps_RefDestoCenter_From "MENUBUTTON \"Run\" 11 3\n" )
                            fprintf( ps_RefDestoCenter_From "ENDFIELD\n" )
           
                            fprintf( ps_RefDestoCenter_From "FIELD aspcHelp\n" )
                            fprintf( ps_RefDestoCenter_From "FLOC 2 9\n" )
                            fprintf( ps_RefDestoCenter_From "MENUBUTTON \"Help\" 11 3\n" )
                            fprintf( ps_RefDestoCenter_From "ENDFIELD\n" )               
                            fprintf( ps_RefDestoCenter_From "ENDTILE\n" )
                            fprintf( ps_RefDestoCenter_From "ENDFORM\n" )
                            close( ps_RefDestoCenter_From )
           
                            ps_RefDestoCenter_From = axlFormCreate( (gensym) ps_RefDestoCenter_From_file '(e inner) 'ps_RefDestoCenter_Routine t )
                            ps_RefDestoCenter_From = axlMiniStatusLoad( (gensym) ps_RefDestoCenter_From_file  'ps_RefDestoCenter_Routine )
                           
    ; set default value to form field
                            axlFormBuildPopup( ps_RefDestoCenter_From "select_layer_name" lLayer_name )
                            axlFormSetField( ps_RefDestoCenter_From "select_layer_name" "Assembly Top" )
                            axlFormSetField( ps_RefDestoCenter_From "Sym_mode" t )
                            axlFormSetFieldVisible( ps_RefDestoCenter_From "aspcRun" 0 )
                            axlFormDisplay( ps_RefDestoCenter_From )
                            deleteFile( ps_RefDestoCenter_From_file )
           
    ; default visible layer is Assembly Top
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/Assembly_TOP" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )       
                            axlVisibleLayer( "Drawing Format/Title_Block" t )                                       
                            axlVisibleLayer( "Drawing Format/Outline" t )       
                            axlVisibleLayer( "Package Geometry/Assembly_Top" t )       
                            axlVisibleLayer( "Ref Des/Assembly_Top" t )       
                            axlVisibleLayer( "Pin/Top" t )               
                            axlFlushDisplay()                                       
                           
                            sPackageLayer = "PACKAGE GEOMETRY/PLACE_BOUND_BOTTOM"                                               
    ;axlMsgPut( "Please select a symbol to move its Refdes in By Symbol mode;" )
    ;axlMsgPut( "or select a layer to move all the Refdes in By Layer mode!" )
                           
                            while( bStop
                            bSym = axlFormGetField( ps_RefDestoCenter_From "Sym_mode" )
                            bLayer = !bSym
                            while( bStop && bSym
                            axlFormSetFieldVisible( ps_RefDestoCenter_From "aspcRun" 0 )
                            axlSetFindFilter(?enabled '("NOALL" "symbols" ) ?onButtons '("symbols" ))
                            axlMsgPut( "Please select a symbol to Move its Refdes." )
                            if(axlSelect() then
                            lSym = axlGetSelSet( )
                                                                           
                            axlClearSelSet()
                            axlSetFindFilter( ?enabled ( list "NOALL"  "TEXT" ) ?onButtons ( list "NOALL" "TEXT" ))
                            lText = axlGetSelSet( axlAddSelectAll( ))                                                               
                            axlClearSelSet()
                                                                           
    ; get text block info, store them in a list
    ; if some block text are not rotate 0, 90, 180 or 270 degree, then need to re-create a some block text
    ; and get its block info
                            lBlock = nil
                            foreach( dText lText
                            unless( member( dText->textBlock lBlock )
                            lBlock = cons( dText->textBlock lBlock )
                            if( dText->rotation == 0.0 || dText->rotation == 180.0
                            then
                            fDelta_y = ( cadadr( dText->bBox ) - cadar( dText->bBox ))*0.32
                            else
                            if( dText->rotation == 90.0 || dText->rotation == 270.0
                            then
                            fDelta_y = ( caadr( dText->bBox ) - caar( dText->bBox ))*0.32
                            else
                            rText_orient = make_axlTextOrientation(
                            ?textBlock dText->textBlock, ?rotation 0.0,
                            ?mirrored dText->isMirrored, ?justify dText->justify
                            )
                            bText_status = caar( axlDBCreateText( dText->text, 0:0, rText_orient, dText->layer, nil ))       
                            fDelta_y = ( cadadr( bText_status->bBox ) - cadar( bText_status->bBox ))*0.32       
                            axlDeleteObject( list( bText_status ))                                                                                                       
                            )
                            ); end if
                            lBlock = cons( fDelta_y lBlock )
                            )
                            ); end foreach                    
                            lBlock = reverse( lBlock )
                                           
    ; move RefDes to Symbol Body Center
                            foreach( dSym lSym
                            lShape = nil
                            sPackageLayer = "PACKAGE GEOMETRY/PLACE_BOUND_BOTTOM"               
                            unless( dSym->isMirrored
                            sPackageLayer = "PACKAGE GEOMETRY/PLACE_BOUND_TOP"
                            )
                            foreach( dChild dSym->children
                            when( dChild->objType == "shape" && dChild->layer == sPackageLayer         
                            lShape = cons( dChild        lShape )                                                                                       
                            )
                            ); end foreach child
                                                                                                                           
    ; when one symbol got more than one place boundry shapes,
    ; need to find the largest one.
                            when( lShape
                            dShape_temp = car( lShape )
                            unless( onep( length( lShape ))
                            for( n 1 length( lShape ) - 1
                            dShape = nth( n lShape )
                            unless(axlDistance( car( dShape->bBox ) cadr( dShape->bBox )) < \
                            axlDistance( car( dShape_temp->bBox ) cadr( dShape_temp->bBox ))
                            dShape_temp = dShape
                            )
                            ); end for               
                            ); end unless
                                                                                                           
    ; get Shape center
                            lSym_shape_box = dShape_temp->bBox
                             fSym_left_x  = caar( lSym_shape_box )
                             fSym_right_x = caadr( lSym_shape_box )
                             fSym_left_y  = cadar( lSym_shape_box )
                             fSym_right_y = cadadr( lSym_shape_box )
                             fSym_center_x = ( fSym_left_x + fSym_right_x )*0.5
                             fSym_center_y = ( fSym_left_y + fSym_right_y )*0.5               
                                                                                                           
    ; get symbol RefDes, and move it to this shape center
           
                            foreach( dText lText
                            when( dText->parent == dSym && dText->text == dSym->refdes && substring( dText->layer 1 7 ) == "REF DES"
                                                                                                                               
    ; here still need to check original text orientation, and adjust text coordinate about 0.32 times
    ; if do not care some special degrees, like 90.287
    ; it will be easy
                            fDelta_y = cadr( member( dText->textBlock lBlock ) )               
                            if( dText->isMirrored then
                            caseq( round( dSym->rotation / 45.0 )
                            (( 0 1 2 7 )
                            fText_rot = round( dSym->rotation / 45.0 ) * 45.0
                            )
                            (( 3 4 5 6 )
                            fText_rot = round( dSym->rotation / 45.0 ) * 45.0 + 180.0
                            )                                       
                            );end case       
                            else
                            caseq( round( dSym->rotation / 45.0 )
                            (( 0 1 2 7 )
                            fText_rot = round( dSym->rotation / 45.0 ) * 45.0
                            )       
                            (( 3 4 5 6        )
                            fText_rot = round( dSym->rotation / 45.0 ) * 45.0 + 180.0
                            )                                               
                            );end case                                               
                            );end if
                                                                                                                                           
                            fSym_x = fSym_center_x + fDelta_y*sin( fText_rot * PI / 180.0 )
                            fSym_y = fSym_center_y - fDelta_y*cos( fText_rot * PI / 180.0 )
                                                                                                                               
                            rText_orient = make_axlTextOrientation(
                            ?textBlock dText->textBlock, ?rotation fText_rot,
                            ?mirrored dText->isMirrored, ?justify dText->justify
                            )
                                                                                                                                                                                                                                                   
                            fSym_xy = fSym_x : fSym_y
                                                                                                                               
                            bText_status = car( axlDBCreateText( dText->text, fSym_xy, rText_orient, dText->layer, dSym ))
                            when( bText_status
                            axlDeleteObject(  dText  )
                            )
                            ); end when
                            ); end foreach
                            ); end when
                            ); end foreach dSym
                            else
                            unless( !bStop || axlFormGetField( ps_RefDestoCenter_From "Layer_mode" )
                            axlMsgPut( "Wrong select, please select symbol!" )
                            )
                            ); end if
                            bSym = axlFormGetField( ps_RefDestoCenter_From "Sym_mode" )
                            ); end Symbol mode
                                           
                            while( bStop && bLayer
    ; in Layer mode, should set Run Button active
                            axlFormSetFieldVisible( ps_RefDestoCenter_From "aspcRun" 1 )
                                                           
                            axlSetFindFilter(?enabled '("NOALL" "symbols" ) ?onButtons '("symbols" ))
                            unless( !bStop || axlFormGetField( ps_RefDestoCenter_From "Sym_mode" )
                            axlMsgPut( "Please select a layer, then click Run Button to move those RefDes on the layer!" )
                            )
                            when(        axlSelect(?prompt nil)
                            lSym = axlGetSelSet( )
                            axlClearSelSet( )
                            )
                            bLayer = axlFormGetField( ps_RefDestoCenter_From "Layer_mode" )
                            ); end layer mode
                            ); end global while loop
                                    else
                                                axlUIConfirm("E- the tool is expired, please contact EDA team")
                                                    )
                                    axlMsgPut( "Done!" )
                                                    ); end procedure ps_RefDestoCenter

                                                    procedure( ps_RefDestoCenter_Routine( ps_RefDestoCenter_From )

                                                    let(
                                                    ( sLayer_active
                            PI
                            lBlock
                            lSym
                            lText
                            sPackageLayer
                            bText_status
                            dShape
                            dShape_temp
                            fDelta_y
                            fSym_center_x
                            fSym_center_y
                            fSym_left_x
                            fSym_left_y
                            fSym_right_x
                            fSym_right_y
                            fSym_x
                            fSym_y
                            fSym_xy
                            fText_rot
                            lShape
                            lSym_shape_box
                            rText_orient
                            nCheck_All
                                                    )
                                                   PI = 3.1415926
                                             case( ps_RefDestoCenter_From->cuRField
                                     ( "select_layer_name"
    ;axlCancelEnterFun( )
    ;axlClearSelSet( )

                              sLayer_active = ps_RefDestoCenter_From->curValue
                             case( sLayer_active
                            ( "Assembly Top"
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/Assembly_TOP" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )       
                            axlVisibleLayer( "Package Geometry/Assembly_Top" t )       
                            axlVisibleLayer( "Ref Des/Assembly_Top" t )
                            axlVisibleLayer( "Pin/Top" t )               
                            )

                                    ( "Silkscreen Top"
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/SilkScreen_TOP" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )
                            axlVisibleLayer( "Package Geometry/SilkScreen_Top" t )       
                            axlVisibleLayer( "Pin/Top" t )
                            axlVisibleLayer( "Ref Des/SilkScreen_Top" t )                               
                            axlVisibleLayer( "Route Keepin/All" t )               
                            axlVisibleLayer( "Route Keepout/Top" t )                               
                            )

                            ( "Assembly Bottom"
                            ; display related layers, assembly or silkscreen Top/Bottom layer
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/Assembly_Bottom" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )       
                            axlVisibleLayer( "Package Geometry/Assembly_Bottom" t )       
                            axlVisibleLayer( "Ref Des/Assembly_Bottom" t )
                            axlVisibleLayer( "Pin/Bottom" t )
                            )

                            ( "Silkscreen Bottom"
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/SilkScreen_BOTTOM" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )
                            axlVisibleLayer( "Package Geometry/SilkScreen_Bottom" t )       
                            axlVisibleLayer( "Pin/Bottom" t )
                            axlVisibleLayer( "Ref Des/SilkScreen_Bottom" t )                               
                            axlVisibleLayer( "Route Keepin/All" t )               
                            axlVisibleLayer( "Route Keepout/BOTTOM" t )                               
                            )

                            ( "Move All"
                            axlCancelEnterFun( )
                            axlClearSelSet( )
                            axlFormSetField( ps_RefDestoCenter_From "Layer_mode" t )
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/Assembly_TOP" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )       
                            axlVisibleLayer( "Package Geometry/Assembly_Top" t )       
                            axlVisibleLayer( "Ref Des/Assembly_Top" t )               
                            axlVisibleLayer( "Board Geometry/SilkScreen_TOP" t )       
                            axlVisibleLayer( "Package Geometry/SilkScreen_Top" t )       
                            axlVisibleLayer( "Pin/Top" t )
                            axlVisibleLayer( "Ref Des/SilkScreen_Top" t )                               
                            axlVisibleLayer( "Route Keepin/All" t )               
                            axlVisibleLayer( "Route Keepout/Top" t )       
                            axlVisibleLayer( "Board Geometry/Assembly_Bottom" t )       
                            axlVisibleLayer( "Package Geometry/Assembly_Bottom" t )       
                            axlVisibleLayer( "Ref Des/Assembly_Bottom" t )
                            axlVisibleLayer( "Board Geometry/SilkScreen_BOTTOM" t )       
                            axlVisibleLayer( "Package Geometry/SilkScreen_Bottom" t )       
                            axlVisibleLayer( "Pin/Bottom" t )
                            axlVisibleLayer( "Ref Des/SilkScreen_Bottom" t )                               
                            axlVisibleLayer( "Route Keepin/All" t )               
                            axlVisibleLayer( "Route Keepout/BOTTOM" t )       
                            )                                       
                            ); end case
                            axlFlushDisplay()       
                            axlShell( "redisplay" )
                                      )
                                      ( "Sym_mode"
                            axlCancelEnterFun( )
                            axlClearSelSet( )
                                      )
                                      ( "Layer_mode"
                            axlCancelEnterFun( )
                            axlClearSelSet( )
                                      )
                                      ( "aspcRun"
                            axlCancelEnterFun( )
                            axlClearSelSet( )
                            sLayer_active = axlFormGetField( ps_RefDestoCenter_From         "select_layer_name" )
                                   
                            nCheck_All = 3
                            unless( sLayer_active == "Move All"
                            nCheck_All = 0
                            )
                            for( i 0 nCheck_All
                            case( i
                            ( 0
                            )
                            ( 1
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/SilkScreen_TOP" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )
                            axlVisibleLayer( "Package Geometry/SilkScreen_Top" t )       
                            axlVisibleLayer( "Pin/Top" t )
                            axlVisibleLayer( "Ref Des/SilkScreen_Top" t )                               
                            axlVisibleLayer( "Route Keepin/All" t )               
                            axlVisibleLayer( "Route Keepout/Top" t )
                            axlFlushDisplay()
                            )
                            ( 2
    ; display related layers, assembly or silkscreen Top/Bottom layer
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/Assembly_Bottom" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )       
                            axlVisibleLayer( "Package Geometry/Assembly_Bottom" t )       
                            axlVisibleLayer( "Ref Des/Assembly_Bottom" t )
                            axlFlushDisplay()
                            )
                            ( 3
                            axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/SilkScreen_BOTTOM" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )
                            axlVisibleLayer( "Package Geometry/SilkScreen_Bottom" t )       
                            axlVisibleLayer( "Pin/Bottom" t )
                            axlVisibleLayer( "Ref Des/SilkScreen_Bottom" t )                               
                            axlVisibleLayer( "Route Keepin/All" t )               
                            axlVisibleLayer( "Route Keepout/BOTTOM" t )       
                            axlFlushDisplay()
                            )
                            ); end case                        
                                           
                             axlClearSelSet()
                             axlSetFindFilter(?enabled '("NOALL" "symbols" ) ?onButtons '("symbols" ))
                            lSym = axlGetSelSet( axlAddSelectAll( ) )
                                                                   
                            axlClearSelSet()                       
                            axlSetFindFilter( ?enabled ( list "NOALL"  "TEXT" ) ?onButtons ( list "NOALL" "TEXT" ) )
                                lText = axlGetSelSet( axlAddSelectAll( ) )                                                               
                                                       
    ; get text block info, store them in a list
    ; if some block text are not rotate 0, 90, 180 or 270 degree, then need to re-create a some block text
    ; and get its block info
                            lBlock = nil
                            foreach( dText lText
                            unless( member( dText->textBlock lBlock )
                            lBlock = cons( dText->textBlock lBlock )
                            if( dText->rotation == 0.0 || dText->rotation == 180.0 then
                            fDelta_y = ( cadadr( dText->bBox ) - cadar( dText->bBox ) )*0.32
                            else
                            if( dText->rotation == 90.0 || dText->rotation == 270.0 then
                            fDelta_y = ( caadr( dText->bBox ) - caar( dText->bBox ) )*0.32
                            else
                                rText_orient = make_axlTextOrientation(
                            ?textBlock dText->textBlock, ?rotation 0.0,
                            ?mirrored dText->isMirrored, ?justify dText->justify
                            )
                                bText_status = caar( axlDBCreateText( dText->text, 0:0, rText_orient, dText->layer, nil ))       
                                fDelta_y =         ( cadadr( bText_status->bBox ) - cadar( bText_status->bBox ) )*0.32       
                                axlDeleteObject( list( bText_status ) )                                                                                                       
                            )
                            ); end if
                            lBlock = cons( fDelta_y lBlock )
                            )
                            ); end foreach                    
                            lBlock = reverse( lBlock )
                                   
    ; move RefDes to Symbol Body Center
                            foreach( dSym lSym
                            lShape = nil
                            sPackageLayer = "PACKAGE GEOMETRY/PLACE_BOUND_BOTTOM"               
                            unless( dSym->isMirrored
                            sPackageLayer = "PACKAGE GEOMETRY/PLACE_BOUND_TOP"
                            )
                            foreach( dChild dSym->children
                            when( dChild->objType == "shape" && dChild->layer == sPackageLayer         
                            lShape = cons( dChild        lShape )                                                                                       
                            )
                            ); end foreach child
                                                                                                                   
    ; when one symbol got more than one place boundry shapes,
    ; need to find the largest one.
                            when( lShape
                            dShape_temp = car( lShape )
                            unless( onep( length( lShape ) )
                            for( n 1 length( lShape ) - 1
                            dShape = nth( n lShape )
                            unless(        axlDistance( car( dShape->bBox ) cadr( dShape->bBox ) ) < \
                            axlDistance( car( dShape_temp->bBox ) cadr( dShape_temp->bBox ) )
                            dShape_temp = dShape
                            )
                            ); end for               
                            ); end unless
                                                                                   
    ; get Shape center
                            lSym_shape_box = dShape_temp->bBox
                            fSym_left_x  = caar( lSym_shape_box )
                            fSym_right_x = caadr( lSym_shape_box )
                            fSym_left_y  = cadar( lSym_shape_box )
                            fSym_right_y = cadadr( lSym_shape_box )
                            fSym_center_x = ( fSym_left_x + fSym_right_x )*0.5
                            fSym_center_y = ( fSym_left_y + fSym_right_y )*0.5               
                                                                                   
    ; get symbol RefDes, and move it to this shape center
                                foreach( dText lText
                                when( dText->parent == dSym && dText->text == dSym->refdes && substring( dText->layer 1 7 ) == "REF DES"
                                fDelta_y = cadr( member( dText->textBlock lBlock ) )               
                            if( dText->isMirrored then                                                               
    ; here still need to check original text orientation, and adjust text coordinate about 0.32 times
    ; if do not care some special degrees, like 90.287
    ; it will be easy
                            caseq( round( dSym->rotation / 45.0 )
                            (( 0 1 2 7 )
                            fText_rot = round( dSym->rotation / 45.0 ) * 45.0
                            )
                            (                ( 3 4 5 6 )
                            fText_rot = round( dSym->rotation / 45.0 ) * 45.0 + 180.0
                            )                                       
                            );end case       
                            else
                            caseq( round( dSym->rotation / 45.0 )
                            (                ( 0 1 2 7 )
                            fText_rot = round( dSym->rotation / 45.0 ) * 45.0
                            )       
                            (                ( 3 4 5 6        )
                            fText_rot = round( dSym->rotation / 45.0 ) * 45.0 + 180.0
                            )                                               
                            );end case                                               
                            );end if
                                                                                                                                   
                            fSym_x = fSym_center_x + fDelta_y*sin( fText_rot * PI / 180.0 )
                            fSym_y = fSym_center_y - fDelta_y*cos( fText_rot * PI / 180.0 )
                                                                                                       
                                rText_orient = make_axlTextOrientation(
                            ?textBlock dText->textBlock,?rotation fText_rot,
                            ?mirrored dText->isMirrored,?justify "center"
                            )  
    ; ?justify dText->justify
                                                                                                                                                                                                                                   
                                fSym_xy = fSym_x : fSym_y
                                                                                                       
                                bText_status = car( axlDBCreateText( dText->text, fSym_xy, rText_orient, dText->layer, dSym ))
                                when( bText_status
                                axlDeleteObject(  dText  )
                                )
                                ); end when
                                ); end foreach
                            ); end when
                            ); end foreach dSym
                            ); end for
                                   
    ; load("MoveRefDestoBodyCenter.il")             r2c   RefDestoCenter
                                   
                            when( nCheck_All > 0
                              axlVisibleDesign( nil )
                            axlVisibleLayer( "Board Geometry/Assembly_TOP" t )       
                            axlVisibleLayer( "Board Geometry/Outline" t )       
                            axlVisibleLayer( "Package Geometry/Assembly_Top" t )       
                            axlVisibleLayer( "Ref Des/Assembly_Top" t )               
                            axlVisibleLayer( "Board Geometry/SilkScreen_TOP" t )       
                            axlVisibleLayer( "Package Geometry/SilkScreen_Top" t )       
                            axlVisibleLayer( "Pin/Top" t )
                            axlVisibleLayer( "Ref Des/SilkScreen_Top" t )                               
                            axlVisibleLayer( "Route Keepin/All" t )               
                            axlVisibleLayer( "Route Keepout/Top" t )
                            axlVisibleLayer( "Board Geometry/Assembly_Bottom" t )       
                            axlVisibleLayer( "Package Geometry/Assembly_Bottom" t )       
                            axlVisibleLayer( "Ref Des/Assembly_Bottom" t )
                            axlVisibleLayer( "Board Geometry/SilkScreen_BOTTOM" t )       
                            axlVisibleLayer( "Package Geometry/SilkScreen_Bottom" t )       
                            axlVisibleLayer( "Pin/Bottom" t )
                            axlVisibleLayer( "Ref Des/SilkScreen_Bottom" t )                               
                            axlVisibleLayer( "Route Keepin/All" t )               
                            axlVisibleLayer( "Route Keepout/BOTTOM" t )       
                            axlFlushDisplay()
                            axlShell( "redisplay" )                       
                            )                               
                            ); end aspcRun
                                      ( "aspcHelp"
                            axlCancelEnterFun( )
                            axlClearSelSet( )
                            nvhtmBrowser( nvmmrbc_HELPPAGE )
                                      )
                                              ); end case
                                            ); end let
                                                    ); end ps_RefDestoCenter_Routine


                                                    procedure( ps_RefDestoCenterstop()

                                                    axlFormClose( ps_RefDestoCenter_From )
                                            axlCancelEnterFun( )
                                            axlClearSelSet( )
                                            axlFlushDisplay( )
                                            axlShell( "redisplay" )
                                            bStop = nil
                                                    )

    头像被屏蔽
  • TA的每日心情
    开心
    2025-1-23 15:05
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    3#
    发表于 2024-11-14 14:30 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽
  • TA的每日心情
    开心
    2025-9-30 15:38
  • 签到天数: 164 天

    [LV.7]常住居民III

    2#
     楼主| 发表于 2024-11-14 09:27 | 只看该作者
    aarom 发表于 2024-11-13 11:06
    一年多前改過, 給老婆用,

    還改了, 增加 "Display BOTTOM" 和 "Display TOP" 選項, 17.2新板框圖層. 還 ...

    麻烦大佬指导一下,这块不知道怎么去修改才能把方向转过来。还有丝印单个器件居中问题。谢谢。
    头像被屏蔽
  • TA的每日心情
    开心
    2025-1-23 15:05
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    1#
    发表于 2024-11-13 11:06 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-22 04:26 , Processed in 0.203125 second(s), 31 queries , Gzip On.

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

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

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