Quantcast
Channel: Cadence PCB Skill Forum
Viewing all 2130 articles
Browse latest View live

autosilkUtils.il

$
0
0

 Hi All:

Hopefully Dave Elder reads this ?

I am running Allegro 16.5  S018 and tried to run the autosilkUtils.il SKILL script.

Everything seems to work except it does not put the DRCs into the walker popup window.

Hopefully someone can fix this ?

This is a great tool

Thanks,

Les


Regarding Cheapest PCB PRICE

$
0
0

 Hey Do anyone herehave any idea...where do i find out the cheapest pcb..

I want it for my Electronics project..

Please Help me out..

Thankss

Silk Rotate skill file

$
0
0

I have this old skill program, RotateSilkAssyRD.il. Its a great tool to get ref des align, re-sized and reset to start

working on cleanup.  I've used it on 15.7, but now on 16.1 and 16.3 I get an error.

When I envoke the skill I get this error.

E- *Error* fprintf: argument #1 should be an I/O port (type template = "ptg") - nil

Not sure where I got it and when, I may have stripped out the authors name in the past.

A great time saver when your working with a lot of parts.

;###########################################################################
;#                                                                         #
;#   Rotate Reference Designator Text on Silkscreen and Assembly Layers    #
;#                                                                         #
;#  This routine rotates Silkscreen and Assembly Reference Designators     #
;#  such that they are all "rightward reading".  This means that all RDs   #
;#  will read left to right if they are horizontal, or bottom to top if    #
;#  they are vertical.                                                     #
;#                                                                         #
;#  Additionally, any Assy RD will automatically be moved to the component #
;#  origin.                                                                #
;#                                                                         #
;#                                                                         #
;#  Usage:  rotate_silkassy (from within Allegro)                          #
;###########################################################################

;##########################
;#  Register Program Name #
;##########################

axlCmdRegister("rotate_silkassy" 'RotateSilkAssyRD)

;#############################
;# MAIN Program Starts Here. #
;#############################

(defun RotateSilkAssyRD ()

  ; ==== Initialize Global Variables ====

  Layer_List = nil
  Text_List  = nil
  Layer_List = nil
  justify    = ""

  LRBT = t   ; Left to Right, Bottom to Top
  LRTB = nil ; Left to Right, Top to Bottom
  RLBT = nil ; Right to Left, Bottom to Top
  RLTB = nil ; Right to Left, Top to Bottom

  CenterAssy = t
  ChangeTextSize  = nil
  TextBlockLarge  = 6
  TextBlockMedium = 3
  TextBlockSmall  = 1
  tblk_large  = "6"
  tblk_medium = "3"
  tblk_small  = "1"

  SilkTop = nil
  SilkBot = nil
  AssyTop = nil
  AssyBot = nil
  silktop_layer = "REF DES/SILKSCREEN_TOP"
  silkbot_layer = "REF DES/SILKSCREEN_BOTTOM"
  assytop_layer = "REF DES/ASSEMBLY_TOP"
  assybot_layer = "REF DES/ASSEMBLY_BOTTOM"
 
  sym_savex  = -1
  sym_savey  = -1
  sym_saveparent = nil

  SetupDir()

  if( axlOKToProceed() then
     
      ; ==== Create and Display the User Interface ====

      createRotateRDForm()
      fFile = strcat( FormDir "rotateRDForm.form" )
      Form = axlFormCreate( (gensym)  fFile  nil 'rotateRDForm_Action t)
      axlFormSetField(Form "LRBT" LRBT)
      axlFormSetField(Form "LRTB" LRTB)
      axlFormSetField(Form "RLBT" RLBT)
      axlFormSetField(Form "RLTB" RLTB)
      axlFormSetField(Form "CenterAssy"      CenterAssy)
      axlFormSetField(Form "TextBlockLarge"  TextBlockLarge )
      axlFormSetField(Form "TextBlockMedium" TextBlockMedium)
      axlFormSetField(Form "TextBlockSmall"  TextBlockSmall )
      axlFormDisplay( Form )
  else
      printf("E- Please terminate your interactive command .\n")
  );endif OKToProceed

); end defun - MAIN Program

;############################################################################
;# doRotateSilkAssy - When OK is hit, perform Reference Designator Rotation #
;#                   Do each layer separately to improve performance.       #
;############################################################################

(defun doRotateSilkAssy ()

   axlClearSelSet()
   axlSetFindFilter( ?enabled   (list "noall"  "text")
                     ?onButtons (list "text")
                   )
   axlMsgPut("Silk/Assy RD rotation started.")
   foreach( layer Layer_List
            axlVisibleDesign(nil)
            axlVisibleLayer( layer t)
            Text_List = axlGetSelSet( axlAddSelectAll() )
            if( length( Text_List ) != 0 then rotateSilkAssy() )
            axlClearSelSet()
            axlFlushDisplay()
            axlMsgPut(strcat( layer " Rotation completed.") )
          ); foreach

; ==== Turn On Top/Bottom Silk & Assembly Layers, if they were changed. ====

   Display_List = list("paramLayerGroup:BOARD GEOMETRY/paramLayer:OUTLINE")
   if( AssyTop == t then
       Display_List = cons("paramLayerGroup:PACKAGE GEOMETRY/paramLayer:ASSEMBLY_TOP" Display_List)
       Display_List = cons("paramLayerGroup:REF DES/paramLayer:ASSEMBLY_TOP"          Display_List)
     )
   if( AssyBot == t then
       Display_List = cons("paramLayerGroup:PACKAGE GEOMETRY/paramLayer:ASSEMBLY_BOTTOM" Display_List)
       Display_List = cons("paramLayerGroup:REF DES/paramLayer:ASSEMBLY_BOTTOM"          Display_List)
     )
   if( SilkTop == t then
       Display_List = cons("paramLayerGroup:PACKAGE GEOMETRY/paramLayer:SILKSCREEN_TOP"  Display_List)
       Display_List = cons("paramLayerGroup:REF DES/paramLayer:SILKSCREEN_TOP"           Display_List)
     )
   if( SilkBot == t then
       Display_List = cons("paramLayerGroup:PACKAGE GEOMETRY/paramLayer:SILKSCREEN_BOTTOM" Display_List)
       Display_List = cons("paramLayerGroup:REF DES/paramLayer:SILKSCREEN_BOTTOM"          Display_List)
     )
   foreach( Layer Display_List
            val = axlGetParam( Layer )
            val->visible = t
            axlSetParam( val )
          )

); end defun - doRotateSilkAssy

;###################################################################### 
;# rotateSilkAssy - Check layer type, Get RD Coordinates and rotation.#
;#                  Rotate RD in place if wrong orientation, change   #
;#                  text justification to "center".                   #
;###################################################################### 

(defun rotateSilkAssy ()
 
   foreach( text_id Text_List
            ;axlMsgPut(strcat("Processing: " text_id->text))
            ; ==== retrieve current information on text id              ====
         
        changeit = 0
        text   = text_id->text
        xy     = text_id->xy
            txt_x  = xCoord( xy )
            txt_y  = yCoord( xy )
            txt_tblk = text_id->textBlock

        ; ==== Change Text to "Center" Justification for ease of use ====

            txt_jus= text_id->justify
            if( txt_jus != "CENTER" then changeit = 1 )

        ; ==== Check current rotation against preferred orientation ====
              ; ==== Change if necessary                                  ====

        txt_rot= text_id->rotation
            if( LRBT == t then
                if( txt_rot == 180 then
                    txt_rot  = 0
              changeit = 1
                  )
                if( txt_rot == 270 then
                    txt_rot  = 90
              changeit = 1
                  )
              );endif LRTB

        if( LRTB == t then
                if( txt_rot == 180 then
                    txt_rot  = 0
              changeit = 1
                  )
                if( txt_rot == 90 then
                    txt_rot  = 270
                    changeit = 1  
                  )
              );endif LRBT

        if( RLBT == t then
                if( txt_rot == 180 then
                    txt_rot  = 0
                    changeit = 1
                  )
                if( txt_rot == 270 then
                    txt_rot  =  90
                    changeit = 1
                  )
              );endif RLBT

        if( RLTB == t then
                if( txt_rot == 180 then
                    txt_rot  = 0
                    changeit = 1
                  )
                if( txt_rot == 90 then
                    txt_rot  = 270
                    changeit = 1
                  )
              );endif RLTB

              ; ==== ON Assembly Layers, if requested by user in form ====
            ; ====    Move Assy Text to Calculated Symbol origin    ====
            ; ====    Change Text Block Sizes for easier reading.   ====
    
            txt_lyr = text_id->layer
            if( txt_lyr == assytop_layer || txt_lyr == assybot_layer || txt_lyr == silktop_layer || txt_lyr == silkbot_layer then
                if( CenterAssy == t then
                    foreach(childid text_id->parent->children
                            if( childid->layer == "PACKAGE GEOMETRY/PLACE_BOUND_TOP" ||
                                childid->layer == "PACKAGE GEOMETRY/PLACE_BOUND_BOTTOM" then               
                                sym_llx = xCoord( xCoord( childid->bBox ))
                                sym_lly = yCoord( xCoord( childid->bBox ))
                                sym_urx = xCoord( yCoord( childid->bBox ))
                                sym_ury = yCoord( yCoord( childid->bBox ))
                                sym_x   = (sym_urx + sym_llx) / 2
                                sym_y   = (sym_ury + sym_lly) / 2
                              );endif childid
                           );end foreach
                    if( txt_rot ==   0 then sym_y = sym_y - 20 )
                    if( txt_rot ==  90 then sym_x = sym_x + 20 )
                    if( txt_rot == 180 then sym_y = sym_y + 20 )
                    if( txt_rot == 270 then sym_x = sym_x - 20 )
                    xy       = list( sym_x sym_y )
                    changeit = 1
                  );endif CenterAssy
             
                if( ChangeTextSize == t then
                    changeit = 1
                    txt_tblk = tblk_large
                    rdalpha  = substring( text 1 1 )
                    if( rdalpha == "C" || rdalpha == "R" then
                        txt_tblk = tblk_small
                      )
                    if( rdalpha == "D" then
                        txt_tblk = tblk_small
                      )
                    rdalpha  = substring( text 1 2 )
                    if( rdalpha == "RN" || rdalpha == "RP" then
                        txt_tblk = tblk_medium
                      )
                if( rdalpha == "FB" || rdalpha == "KP" then
                        txt_tblk = tblk_medium
                      )
              if( rdalpha == "TP" then
                        txt_tblk = tblk_small
                      )
                  );endif ChangeTextBlock
              );endif txt_lyer

          ; ==== Do text movement, if anything has changed ====
         
;VAN HUYNH modified here (add _RD)

            if( changeit == 1 then createTextBlock_RD())
      ); endforeach

); end defun - rotateSilkAssy

;#################################################################### 
;# createTextBlock - Create text record and write information to    #
;#                   the database.                                  #
;#################################################################### 

;VAN HUYNH modified here (add _RD)

(defun createTextBlock_RD ()

  textBlock = txt_tblk
  rotation  = txt_rot
  parent_id = text_id->parent        ; symbol association
  mirrored  = text_id->isMirrored    ; t/nil
  justify   = "CENTER"               ; "LEFT" "CENTER" "RIGHT"

  ; ==== setup defstruct for text insertion ====

  textOrientation = make_axlTextOrientation( ?textBlock textBlock,
                                             ?rotation  rotation,
                                             ?mirrored  mirrored,
                                             ?justify   justify
                                           )
  ; ==== Add new text and delete the existing text if successful ===
 
  update = axlDBCreateText( text, xy, textOrientation,
                            text_id->layer, parent_id
                          )
  if( update != nil then
    ; axlMsgPut("Update Succeeded.")
      axlDeleteObject( list( text_id ))
  else
      axlMsgPut( strcat( "Update Failed on " text ) )
    ); endif

); end defun - createTextBlock_RD

;VAN HUYNH modified here (add _RD)

 ;###########################################################
 ;# Form CallBacks - Determine Allegro command to execute   #
 ;#                  based on the user's selection          #
 ;###########################################################
 
(defun rotateRDForm_Action (Form)
 
   (case Form->curField
     ("SilkTop"
        SilkTop=Form->curValue
     ); end "SilkTop"

     ("SilkBot"
        SilkBot=Form->curValue
     ); end "SilkBot"

     ("AssyTop"
        AssyTop=Form->curValue
     ); end "AssyTop"

     ("AssyBot"
        AssyBot=Form->curValue
     ); end "AssyBot"

     ("LRBT"
        LRBT=Form->curValue
        orient_0   = t
        orient_90  = t
        orient_180 = nil
        orient_270 = nil
     ); end "LRTB"
 
     ("LRTB"
        LRTB=Form->curValue
        orient_0   = t
        orient_90  = nil
        orient_180 = nil
        orient_270 = t
     ); end "LRTB"

     ("RLBT"
        RLBT=Form->curValue
        orient_0   = nil
        orient_90  = t
        orient_180 = t
        orient_270 = nil
     ); end "LRTB"
 
     ("RLTB"
        RLTB=Form->curValue
        orient_0   = nil
        orient_90  = nil
        orient_180 = t
        orient_270 = t
     ); end "LRTB"

     ("CenterAssy"
        CenterAssy=Form->curValue
     ); end "CenterAssy"

     ("ChangeTextSize"
        ChangeTextSize=Form->curValue
     ); end "ChangeTextSize"

     ("TextBlockLarge"
        TextBlockLarge=Form->curValue
        sprintf( tblk_large "%L" TextBlockLarge )
     ); end "TextBlockLarge"

     ("TextBlockMedium"
        TextBlockMedium=Form->curValue
        sprintf( tblk_medium "%L" TextBlockMedium )
     ); end "TextBlockMedium"

     ("TextBlockSmall"
        TextBlockSmall=Form->curValue
        sprintf( tblk_small "%L" TextBlockSmall )
     ); end "TextBlockSmall"

     ("done"
        ; ==== cons puts the list together in reverse order
        if( AssyBot == t then Layer_List = cons( assybot_layer Layer_List ) )
        if( AssyTop == t then Layer_List = cons( assytop_layer Layer_List ) )
        if( SilkBot == t then Layer_List = cons( silkbot_layer Layer_List ) )
        if( SilkTop == t then Layer_List = cons( silktop_layer Layer_List ) )
        doRotateSilkAssy()
        (axlFormClose Form)
        (axlCancelEnterFun)
        deleteFile( fFile )
     ); end "done"

     ("cancel"
        (axlFormClose Form)
        (axlCancelEnterFun)
        deleteFile( fFile )
     ); end "cancel"

   ); end case
 
 ); end defun - rotateRDForm_Action

  ;#########################
  ;# End Form CallBacks    #
  ;#########################
 
 
  ;###########################################################
  ;# createTitleBlockForm - Main User Interface Form         #
  ;#                        Brought up by executing command. #
  ;###########################################################

(defun createRotateRDForm () 

   fFile = strcat( FormDir "rotateRDForm.form" )
   Form  = outfile( fFile "w")
   fprintf(Form "FILE_TYPE=FORM_DEFN VERSION=2\n")
   fprintf(Form "FORM\n")
   fprintf(Form "FIXED\n")
   fprintf(Form "PORT 77 20\n")
   fprintf(Form "HEADER \"Rotate Silkscreen/Assembly Reference Designators V2.0\"\n")
   fprintf(Form "TILE\n")
 
   fprintf(Form "GROUP \"Select Layers to Rotate\"\n")
   fprintf(Form "GLOC 2 1\n")
   fprintf(Form "GSIZE 72 4\n")
   fprintf(Form "ENDGROUP\n")

   fprintf(Form "FIELD \"SilkTop\"\n")
   fprintf(Form "FLOC 3 3 \n")
   fprintf(Form "CHECKLIST \"Silkscreen-Top\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD \"SilkBot\"\n")
   fprintf(Form "FLOC 20 3 \n")
   fprintf(Form "CHECKLIST \"Silkscreen-Bottom\" \n")
   fprintf(Form "ENDFIELD\n")
  
   fprintf(Form "FIELD \"AssyTop\"\n")
   fprintf(Form "FLOC 37 3 \n")
   fprintf(Form "CHECKLIST \"Assembly-Top\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD \"AssyBot\"\n")
   fprintf(Form "FLOC 54 3 \n")
   fprintf(Form "CHECKLIST \"Assembly-Bottom\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "GROUP \"Select RD Orienation\"\n")
   fprintf(Form "GLOC 2 5\n")
   fprintf(Form "GSIZE 32 13\n")
   fprintf(Form "ENDGROUP\n")

   fprintf(Form "GROUP \"Ref Des Alterations\"\n")
   fprintf(Form "GLOC 36 5\n")
   fprintf(Form "GSIZE 38 13\n")
   fprintf(Form "ENDGROUP\n")

   fprintf(Form "TEXT \"Horizontal           Vertical \"\n")
   fprintf(Form "TLOC 6 7 \n")
   fprintf(Form "ENDTEXT\n")

   fprintf(Form "FIELD \"LRBT\"\n")
   fprintf(Form "FLOC 3 9 \n")
   fprintf(Form "CHECKLIST \"Left to Right     Bottom to Top\" \"rotate_group\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD \"LRTB\"\n")
   fprintf(Form "FLOC 3 11 \n")
   fprintf(Form "CHECKLIST \"Left to Right     Top to Bottom\" \"rotate_group\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD \"RLBT\"\n")
   fprintf(Form "FLOC 3 13 \n")
   fprintf(Form "CHECKLIST \"Right to Left     Bottom to Top\" \"rotate_group\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD \"RLTB\"\n")
   fprintf(Form "FLOC 3 15 \n")
   fprintf(Form "CHECKLIST \"Right to Left     Top to Bottom\" \"rotate_group\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD \"CenterAssy\"\n")
   fprintf(Form "FLOC 37 7 \n")
   fprintf(Form "CHECKLIST \"Center Assembly RDs at Part Origin\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD \"ChangeTextSize\"\n")
   fprintf(Form "FLOC 37 9 \n")
   fprintf(Form "CHECKLIST \"Change Text Block Sizes\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "TEXT \"Large  Text Block: \"\n")
   fprintf(Form "TLOC 39 11 \n")
   fprintf(Form "ENDTEXT\n")

   fprintf(Form "TEXT \"Medium Text Block: \"\n")
   fprintf(Form "TLOC 39 13 \n")
   fprintf(Form "ENDTEXT\n")

   fprintf(Form "TEXT \"Small Text Block: \"\n")
   fprintf(Form "TLOC 39 15 \n")
   fprintf(Form "ENDTEXT\n")

   fprintf(Form "FIELD \"TextBlockLarge\"\n")
   fprintf(Form "FLOC 55 11 \n")
   fprintf(Form "INTSLIDEBAR 3 3\n MIN 1\n MAX 60\n FGROUP\"TxtBlock\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD \"TextBlockMedium\"\n")
   fprintf(Form "FLOC 55 13 \n")
   fprintf(Form "INTSLIDEBAR 3 3\n MIN 1\n MAX 60\n FGROUP\"TxtBlock\" \n")
   fprintf(Form "ENDFIELD\n")
 
   fprintf(Form "FIELD \"TextBlockSmall\"\n")
   fprintf(Form "FLOC 55 15 \n")
   fprintf(Form "INTSLIDEBAR 3 3\n MIN 1\n MAX 60\n FGROUP\"TxtBlock\" \n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD done\n")
   fprintf(Form "FLOC 6 18\n")
   fprintf(Form "MENUBUTTON \"Done\" 6 3\n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "FIELD cancel\n")
   fprintf(Form "FLOC 16 18\n")
   fprintf(Form "MENUBUTTON \"CANCEL\" 6 3\n")
   fprintf(Form "ENDFIELD\n")

   fprintf(Form "ENDTILE\n")
   fprintf(Form "ENDFORM\n")
   close(Form)
); end defun  - createRotateRDForm
 
 

 

 

 

Skill code to move component

$
0
0

Hi,
I'm trying to generate a skill program that launches place manual -hide and then picks a specific coordinate to pick up the component placed in that coordinate.

I know that I have a pin placed in 0,0 and would like the skill program to pick that coordinate and leave the component on the mouse for me to place manually.

I've tried doing the following
axlShell("place manual -h")
axlShell("pick 0 0")

and I've also tried running a script that I've recorded that does the exact same, but both methods fail. They do launch the place manual command but I cannot get skill to pick that coordinate so that it is left for me to move the component

Does anyone have some good ideas, thanks.

Best regards,
Ole


Originally posted in cdnusers.org by ejlersen

is there a skill code to check .dra or .brd for missing info?

$
0
0

 

Is there an existing skill code that can check a .dra or .brd for missing info in a symbol or all symbols? For example if its missing max height property or missing a dfa_bound_top shape or any other element that you want checked.

If there is no existing skill code or way to do this in allegro who wants to try and have a go at it?

 Thank you - Gino

Generate External DRC

$
0
0

 

Hey,

I saw a post recently regarding the skill command on generating external DRC, "axlDBCreateExternalDRC"... where could I get this?

 Thanks!

Count via by netlist help ?

$
0
0

 Hi everybody! I'm writting a skill to count number of via of net in a list nets. before I show my problem, please see my code below:

......................

 ;========Declare Subclasses==========
subclasses = '( "VP24", "VP2" )

;========Check input file==========
if(isFile("listnet.txt") then
netlist=nil
inPort = infile( "listnet.txt" )
when( inPort
while( gets( nextline inPort )
nextline = car(parseString(nextline, "\n"))
nextline = car(parseString(nextline, " "))
netlist=cons(concat(nextline),netlist)
);end while
close( inPort )
netlist=reverse(netlist)
;========== Write out file===============================================
    writeOutFile = outfile( "./Count_via_report.csv" )

;========== Format Intro for outfile ====================================
intro="Net_name,"
foreach(subclass, subclasses
    sprintf(intro,strcat(intro, " Layer_", subclass,"," ))
);end foreach
fprintf(writeOutFile, "%s\n\n",intro)

;==========format what to do for each layer and caculateing them=============================
foreach(subclass, subclasses
axlVisibleDesign(nil)
axlVisibleLayer(strcat("via class/", subclass) t)
axlVisibleUpdate(t)
axlSetFindFilter(?enabled '(noall vias) ?onButtons '(noall vias))
allViasInSubclass = axlGetSelSet(axlAddSelectAll())
axlClearSelSet()

;========Create for each net in each layer a symbol in order to count number vias of that net=========
foreach(net, netlist
    sum_net = concat(net, "_", subclass)
    set(sum_net , nil)
    sum_net  = setof(via, allViasInSubclass, via->net->name == get_pname(net))
);end foreach net
);end foreach subclass

;===========Format output data for outfile =============================
foreach(net, netlist
line = ""
  foreach(subclass, subclasses
    sum_net = concat(net, "_", subclass)
    sprintf(line, "%-30s, %-6L",line, length(eval(sum_net)) )
  );end foreach subclass
fprintf(writeOutFile, "%s %s\n", net, line)
);end foreach net of netlist

fprintf(writeOutFile "END OF FILE")
close(writeOutFile)
........................

my problem is: When i get number vias for each net by command    "setof(...... ) "  ,  sum_net is a list and having values in it. But when I recall them to display in output file , It become a symbol. 

  How can i fix it? Please help me.

Thanks !

Luan.

 

Key Mapping While in Placement Mode

$
0
0

I am a new user to OrCad PCB Editor and I was curious is it possible to add "rotate" to a key function while a part is selected in placement mode? 

Thanks, 

Jason  


Check Pin location?

$
0
0

 Hi everyone!

   How can I check if there is any Pin in a location xy ? I try to do that but not success.

This is my test:

...................................

xy_loc = car(via->startEnd)

axlVisibleDesign(nil)
axlVisibleUpdate(t)
axlVisibleLayer("Pin/Top" t)
axlSetFindFilter(?enabled '(noall pins) ?onButtons '(noall pins))

a1 = axlGetSelSet(axlSingleSelectPoint(xy_loc))
a2 = a1->objType
fprintf(writeOutFile "%L\n", a1)

fprintf(writeOutFile "%L\n", a2)


....................

 I sure  that there is not any pin at my via location, but the result are : a1 = dbid 66582xxxx, a2=ni.

how can I check a location having pin or not and how can get  name of pin if pin exist.

Searching within one particular community forum

$
0
0
Hi,

Is it possible to search for something limited to 1 particular forum only.

At present, if I have to search something results come out from other Forum groups also.

Pawan

select cline without the action of user

$
0
0

Hi everyone. Is there a way to catch anything (lets say two clines) in the selection set without the need of the user to manualy select them? 

for example, if I need to catch some thing I use:

Variable = axlGetSelSet( axlSelect( ?prompt "Select what you need." ) )

and then I manually select what I need with the mouse.  But I don't want to wait for the mouse selection. I'm not able to get the dbid of the clines I want, but I do have the position. Is there a way to select things just including their position directly in the code?   like indicating the coordinates  or some thing??

thanks. Have a wonderful one 

Checking space constraints for selected Cline

$
0
0

Hi All,

How can i check what is the minimum distance from selected Cline with net name  " NAME_1"

 to shape with net name  "NAME_2" - the parameter that defined in Const. Manager-->Spacing-->Net Class-Class.

(Cline & Shape  belong to different clasess).

In a simple words: How can i check (with skill code) how far the dynamic shape with net name  "NAME_2" will retreat

 from cline with net name  "NAME_1"  while routing inside the shape. (I'm not  interested in checkin air gap).

Thanks in advance.

 

how to use axlformsetfield in a grid

$
0
0

Hi

The documentation say that it should be possible to change just 1 cell using axlformsetfield but I've not been able to find a description of the syntax, can anyone help on this?

Never mind, I found the solution, just need to define cell->row, cell->col and cell->value and then pass cell as the argument to the command.

Best regards

Ole

Net Schedule

$
0
0

Hello All,

 I was wondering if there is a way to make a net schedule skill program that will allow me to select nets on the board and create T points for connections between 3 IC's easily.  Example would be main IC to 2 DDR2 in tree routing.

 We work off of netlist and do not have sigxplorer.

I would like to see something that would allow me to select multiple nets at once such as ADDR Group and be able to specify approximate area where I would like the T points for net scheduling without assigning it one by one.

 I would appreciate it if anyone has any suggestions.  On 16.3 performance L

 Thanks in Advance 

axlDBCreateText with parent dbid is removed on refresh/update symbols

$
0
0
Dear All,

 I am creating additional text for symbols using  below syntax. Text got created successfully.

But when I refresh/update the symbols, these text gets removed from the database symbols.

 axlDBCreateText( TP_netname , TP->xy, tp_text_orient, create_tp_textlayer, parent_dbid)

 since this is user defined text in layout they are getting removed. Is there a way to override to make this text retained.

 Thanks,

Nagaraj.

Looking for Skill routine

$
0
0

When manually placing a component (Allegro), it can be given a location by typing "x<space>X<space>Y".

What I am looking for is a routine that perhaps opens a window and lets me enter:

Location

Rotation

Top or Bottom

Lock

Is there a routine out there or can someone guide me on how to achieve this (no experience of skill)?

How to select specific Tab in form and specific row in grid

$
0
0

Hi

I've created a multitab UI and would like to know if there is a way to startup on a specific tab of the program. All settings are saved as attachments and I could easily store this also, but I've not been able to find any help regarding this in the documentation.

My second challenge is that I'm also working with a grid based form (it is not multirow enabled) on one of the tabs where rows can be moved up and down, for this I would like to know if there is a way to do a rowselect of a specific row?

Best regards

Ole

How to keep your variables in the design?

$
0
0

Hi, All.

I have a script that creates a form with several fields. I want to save the contents of these fields in design, and the next time when I open the design and launches the script I have already configured the form.

There are functions for including the file or string to .brd-file, there are functions for working with the properties of the design...

What is the best way to save my settings?

Maybe someone has an example code?

Thank you.

Custom menus by Product

$
0
0

 I have a SKILL file that loads a couple custom menu items.  One of the custom menu items is relevant to two products PCB Editor and Symbol Editor), but the other one only applies to PCB Editor, so I do not want it to load when the Symbol Editor is invoked.  I wanted to find out if it is possible to determine which product is starting (e.g. Allegro PCB Editor or Allegro Symbol Editor) and only load the custom menu relevant to that product, and if so, how would I do that?  Do I need to have three different SKILL files, one that figures out the product and then calls the appropriate SKILL menu file?

about ipcBeginProcess in Windows 7 64 bit machine

$
0
0

Hi,

has anyone have an issue with ipcBeginProcess? i have an exe program that need to be run from Allegro, running the exe outside Allegro does it job, but when calling it from allegro it does not work at all (not being called to be exact), is there an issue of ipcBeginProcess not working in Allegro win7 64 bit

i tried this ipcBeginProcess("notepad") and it is working and using ipcBeginProcess in an XP 32 bit machine is also working

*** shell is not an option since i need to run the exe without showing the cmd console window and I need to know when exe program finished its job

edit: using shell aside from the cmd console window was being shown the exe program was working

 thanks

 

Viewing all 2130 articles
Browse latest View live