Protel库文件导入设计(二)

一些朋友根据我的 文章《Protel库文件导入设计》进行Protel库的导入实现,发现还有一些情况未能处理。问题反馈给我一看,果然,对不住各位了。

主要现象:导入TI Advanced CMOS Logic (Commercial).lib库时,出现两种异常现象,一是所有的管脚名好象重叠在一起,看不清楚。二是经常弹出Symbol、Junction等提示。

经查,原来如此。

下面以例说明。

 

   Component
      2
      2
     
      DUAL OCTAL BUS TRANCEIVERS AND REG 3SO
      SOICL56
     
     
     
     
     
     
     
     
     
     
     
      U?
     
      74AC16652
      74ACT16652
      Part
         0 0
         Rectangle 0 -150 60 10 0 128 11599871 0 1
         Pin 1 0 0 0 1 1 30 0 0 2 0 'G/BA' '56'
         Pin 0 0 0 0 1 1 30 0 -10 2 0 'GAB' '1'
         Pin 0 1 0 0 1 1 30 0 -20 2 0 'CBA' '55'
         Pin 0 0 0 0 1 1 30 0 -30 2 0 'SBA' '54'
         Pin 0 1 0 0 1 1 30 0 -40 2 0 'CAB' '2'
         Pin 0 0 0 0 1 1 30 0 -50 2 0 'SAB' '3'
         Pin 0 0 5 0 1 1 30 0 -70 2 0 'A1' '5'
         Pin 0 0 0 0 1 1 30 60 -30 0 0 'B1' '52'
         Pin 0 0 5 0 1 1 30 0 -80 2 0 'A2' '6'
         Pin 0 0 0 0 1 1 30 60 -40 0 0 'B2' '51'
         Pin 0 0 5 0 1 1 30 0 -90 2 0 'A3' '8'
         Pin 0 0 0 0 1 1 30 60 -50 0 0 'B3' '49'
         Pin 0 0 5 0 1 1 30 0 -100 2 0 'A4' '9'
         Pin 0 0 0 0 1 1 30 60 -60 0 0 'B4' '48'
         Pin 0 0 5 0 1 1 30 0 -110 2 0 'A5' '10'
         Pin 0 0 0 0 1 1 30 60 -70 0 0 'B5' '47'
         Pin 0 0 5 0 1 1 30 0 -120 2 0 'A6' '12'
         Pin 0 0 0 0 1 1 30 60 -80 0 0 'B6' '45'
         Pin 0 0 5 0 1 1 30 0 -130 2 0 'A7' '13'
         Pin 0 0 0 0 1 1 30 60 -90 0 0 'B7' '44'
         Pin 0 0 5 0 1 1 30 0 -140 2 0 'A8' '14'
         Pin 0 0 0 0 1 1 30 60 -100 0 0 'B8' '43'
         Pin 0 0 7 1 1 1 30 0 -180 2 0 'VCC' '50'
         Pin 0 0 7 1 1 1 30 0 -190 2 0 'VCC' '35'
         Pin 0 0 7 1 1 1 30 0 -200 2 0 'VCC' '22'
         Pin 0 0 7 1 1 1 30 0 -210 2 0 'VCC' '7'
         Pin 0 0 7 1 1 1 30 60 -160 0 0 'GND' '4'
         Pin 0 0 7 1 1 1 30 60 -170 0 0 'GND' '11'
         Pin 0 0 7 1 1 1 30 60 -180 0 0 'GND' '18'
         Pin 0 0 7 1 1 1 30 60 -190 0 0 'GND' '25'
         Pin 0 0 7 1 1 1 30 60 -200 0 0 'GND' '53'
         Pin 0 0 7 1 1 1 30 60 -210 0 0 'GND' '46'
         Pin 0 0 7 1 1 1 30 60 -220 0 0 'GND' '39'
         Pin 0 0 7 1 1 1 30 60 -230 0 0 'GND' '32'
      EndNormalPart
      EndDeMorganPart
         Polygon 0 11599871 11599871 1 0 12 0 5 80 5 80 -55 70 -55 70 -65 80 -65 80 -175 0 -175 0 -65 10 -65 10 -55 0 -55
         Label 37 -4 0 8388608 2 0 ''
         Pin 0 0 0 0 0 1 30 0 0 2 0 'G/BA' '56'
         Symbol 4 -10 0 8 0 0 255 0
         Label 5 -3 0 8388608 2 0 'EN1 [BA]'
         Pin 0 0 0 0 0 1 30 0 -10 2 0 'GAB' '1'
         Label 5 -13 0 8388608 2 0 'EN2 [AB]'
         Pin 0 0 0 0 0 1 30 0 -20 2 0 'CBA' '55'
         Symbol 3 0 -22 6 0 0 255 0
         Label 10 -23 0 8388608 2 0 'C4'
         Pin 0 0 0 0 0 1 30 0 -30 2 0 'SBA' '54'
         Label 5 -33 0 8388608 2 0 'G5'
         Pin 0 0 0 0 0 1 30 0 -40 2 0 'CAB' '2'
         Symbol 3 0 -42 6 0 0 255 0
         Label 10 -43 0 8388608 2 0 'C6'
         Pin 0 0 0 0 0 1 30 0 -50 2 0 'SAB' '3'
         Label 5 -53 0 8388608 2 0 'G7'
         Label 37 -74 0 8388608 2 0 ''
         Symbol 19 15 -71 4 0 0 255 0
         Label 25 -74 0 8388608 2 0 '1'
         Pin 0 0 5 0 0 1 30 0 -80 2 0 'A1' '5'
         Symbol 2 -10 -82 6 0 0 255 0
         Symbol 10 2 -83 8 0 0 255 0
         Label 10 -83 0 8388608 2 0 '1'
         Label 57 -74 0 8388608 2 0 ''
         Label 45 -73 0 8388608 2 0 '5'
         Pin 0 0 0 0 0 1 30 80 -70 0 0 'B1' '52'
         Symbol 2 82 -72 6 0 0 255 0
         Label 65 -73 0 8388608 2 0 '4D'
         Label 57 -84 0 8388608 2 0 '1'
         Label 45 -84 0 8388608 2 0 '5/'
         Line 80 -80 93 -80 1 0 128 0
         Symbol 2 82 -82 6 0 0 255 0
         Line 93 -80 93 -70 1 0 128 0
         Junction 93 -70 0 128 0
         Label 15 -94 0 8388608 2 0 ''
         Symbol 19 50 -91 4 0 0 255 0
         Label 60 -94 0 8388608 2 0 '1'
         Label 17 -94 0 8388608 2 0 ''
         Line -13 -90 0 -90 1 0 128 0
         Label 5 -93 0 8388608 2 0 '6D'
         Line -13 -90 -13 -80 1 0 128 0
         Junction -13 -80 0 128 0
         Label 30 -93 0 8388608 2 0 '7'
         Label 17 -104 0 8388608 2 0 '1'
         Line -13 -100 0 -100 1 0 128 0
         Line -13 -100 -13 -90 1 0 128 0
         Junction -13 -90 0 128 0
         Label 30 -103 0 8388608 2 0 '7/'
         Line 80 -100 93 -100 1 0 128 0
         Label 65 -103 0 8388608 2 0 '2'
         Symbol 10 70 -103 8 0 0 255 0
         Line 93 -100 93 -80 1 0 128 0
         Junction 93 -80 0 128 0
         Pin 0 0 5 0 0 1 30 0 -110 2 0 'A2' '6'
         Pin 0 0 0 0 0 1 30 80 -110 0 0 'B2' '51'
         Pin 0 0 5 0 0 1 30 0 -120 2 0 'A3' '8'
         Pin 0 0 0 0 0 1 30 80 -120 0 0 'B3' '49'
         Pin 0 0 5 0 0 1 30 0 -130 2 0 'A4' '9'
         Pin 0 0 0 0 0 1 30 80 -130 0 0 'B4' '48'
         Pin 0 0 5 0 0 1 30 0 -140 2 0 'A5' '10'
         Pin 0 0 0 0 0 1 30 80 -140 0 0 'B5' '47'
         Pin 0 0 5 0 0 1 30 0 -150 2 0 'A6' '12'
         Pin 0 0 0 0 0 1 30 80 -150 0 0 'B6' '45'
         Pin 0 0 5 0 0 1 30 0 -160 2 0 'A7' '13'
         Pin 0 0 0 0 0 1 30 80 -160 0 0 'B7' '44'
         Pin 0 0 5 0 0 1 30 0 -170 2 0 'A8' '14'
         Pin 0 0 0 0 0 1 30 80 -170 0 0 'B8' '43'
         Label 37 -184 0 8388608 2 0 ''
         Pin 0 0 7 1 0 1 30 0 -200 2 0 'VCC' '50'
         Pin 0 0 7 1 0 1 30 0 -210 2 0 'VCC' '35'
         Pin 0 0 7 1 0 1 30 0 -220 2 0 'VCC' '22'
         Pin 0 0 7 1 0 1 30 0 -230 2 0 'VCC' '7'
         Pin 0 0 7 1 0 1 30 80 -180 0 0 'GND' '4'
         Pin 0 0 7 1 0 1 30 80 -190 0 0 'GND' '11'
        Pin 0 0 7 1 0 1 30 80 -200 0 0 'GND' '18'
         Pin 0 0 7 1 0 1 30 80 -210 0 0 'GND' '25'
         Pin 0 0 7 1 0 1 30 80 -220 0 0 'GND' '53'
         Pin 0 0 7 1 0 1 30 80 -230 0 0 'GND' '46'
         Pin 0 0 7 1 0 1 30 80 -240 0 0 'GND' '39'
         Pin 0 0 7 1 0 1 30 80 -250 0 0 'GND' '32'
         Line 10 -65 10 -55 0 0 128 0
         Line 10 -55 0 -55 0 0 128 0
         Line 0 -55 0 5 0 0 128 0
         Line 0 5 80 5 0 0 128 0
         Line 80 5 80 -55 0 0 128 0
         Line 80 -55 70 -55 0 0 128 0
         Line 70 -55 70 -65 0 0 128 0
         Line 0 -65 80 -65 0 0 128 0
         Line 80 -175 80 -65 0 0 128 0
         Line 80 -105 0 -105 0 0 128 0
         Line 0 -175 0 -65 0 0 128 0
         Line 80 -85 0 -85 0 0 128 0
         Line 80 -75 40 -75 0 0 128 0
         Line 40 -105 40 -65 0 0 128 0
         Line 35 -70 45 -70 0 0 128 0
         Line 35 -80 45 -80 0 0 128 0
         Line 40 -95 0 -95 0 0 128 0
         Line 35 -90 45 -90 0 0 128 0
         Line 35 -100 45 -100 0 0 128 0
         Line 80 -115 0 -115 0 0 128 0
         Line 80 -125 0 -125 0 0 128 0
         Line 80 -135 0 -135 0 0 128 0
         Line 80 -145 0 -145 0 0 128 0
         Line 80 -155 0 -155 0 0 128 0
        Line 80 -165 0 -165 0 0 128 0
         Line 80 -175 0 -175 0 0 128 0
      EndIEEEPart
      Part
         0 0
         Rectangle 0 -150 60 10 0 128 11599871 0 1
         Pin 1 0 0 0 1 1 30 0 0 2 0 'G/BA' '29'
         Pin 0 0 0 0 1 1 30 0 -10 2 0 'GAB' '28'
         Pin 0 1 0 0 1 1 30 0 -20 2 0 'CBA' '30'
         Pin 0 0 0 0 1 1 30 0 -30 2 0 'SBA' '31'
         Pin 0 1 0 0 1 1 30 0 -40 2 0 'CAB' '27'
         Pin 0 0 0 0 1 1 30 0 -50 2 0 'SAB' '26'
         Pin 0 0 5 0 1 1 30 0 -70 2 0 'A1' '15'
         Pin 0 0 0 0 1 1 30 60 -30 0 0 'B1' '42'
         Pin 0 0 5 0 1 1 30 0 -80 2 0 'A2' '16'
         Pin 0 0 0 0 1 1 30 60 -40 0 0 'B2' '41'
         Pin 0 0 5 0 1 1 30 0 -90 2 0 'A3' '17'
         Pin 0 0 0 0 1 1 30 60 -50 0 0 'B3' '40'
         Pin 0 0 5 0 1 1 30 0 -100 2 0 'A4' '19'
         Pin 0 0 0 0 1 1 30 60 -60 0 0 'B4' '38'
         Pin 0 0 5 0 1 1 30 0 -110 2 0 'A5' '20'
         Pin 0 0 0 0 1 1 30 60 -70 0 0 'B5' '37'
         Pin 0 0 5 0 1 1 30 0 -120 2 0 'A6' '21'
         Pin 0 0 0 0 1 1 30 60 -80 0 0 'B6' '36'
         Pin 0 0 5 0 1 1 30 0 -130 2 0 'A7' '23'
         Pin 0 0 0 0 1 1 30 60 -90 0 0 'B7' '34'
         Pin 0 0 5 0 1 1 30 0 -140 2 0 'A8' '24'
         Pin 0 0 0 0 1 1 30 60 -100 0 0 'B8' '33'
         Pin 0 0 7 1 1 1 30 0 -180 2 0 'VCC' '50'
         Pin 0 0 7 1 1 1 30 0 -190 2 0 'VCC' '35'
         Pin 0 0 7 1 1 1 30 0 -200 2 0 'VCC' '22'
         Pin 0 0 7 1 1 1 30 0 -210 2 0 'VCC' '7'
         Pin 0 0 7 1 1 1 30 60 -160 0 0 'GND' '4'
         Pin 0 0 7 1 1 1 30 60 -170 0 0 'GND' '11'
         Pin 0 0 7 1 1 1 30 60 -180 0 0 'GND' '18'
         Pin 0 0 7 1 1 1 30 60 -190 0 0 'GND' '25'
         Pin 0 0 7 1 1 1 30 60 -200 0 0 'GND' '53'
         Pin 0 0 7 1 1 1 30 60 -210 0 0 'GND' '46'
         Pin 0 0 7 1 1 1 30 60 -220 0 0 'GND' '39'
         Pin 0 0 7 1 1 1 30 60 -230 0 0 'GND' '32'
      EndNormalPart
      EndDeMorganPart
        Polygon 0 11599871 11599871 1 0 12 0 5 80 5 80 -55 70 -55 70 -65 80 -65 80 -175 0 -175 0 -65 10 -65 10 -55 0 -55
         Label 37 -4 0 8388608 2 0 ''
         Pin 0 0 0 0 0 1 30 0 0 2 0 'G/BA' '29'
         Symbol 4 -10 0 8 0 0 255 0
         Label 5 -3 0 8388608 2 0 'EN1 [BA]'
         Pin 0 0 0 0 0 1 30 0 -10 2 0 'GAB' '28'
         Label 5 -13 0 8388608 2 0 'EN2 [AB]'
         Pin 0 0 0 0 0 1 30 0 -20 2 0 'CBA' '30'
         Symbol 3 0 -22 6 0 0 255 0
         Label 10 -23 0 8388608 2 0 'C4'
         Pin 0 0 0 0 0 1 30 0 -30 2 0 'SBA' '31'
         Label 5 -33 0 8388608 2 0 'G5'
         Pin 0 0 0 0 0 1 30 0 -40 2 0 'CAB' '27'
         Symbol 3 0 -42 6 0 0 255 0
         Label 10 -43 0 8388608 2 0 'C6'
         Pin 0 0 0 0 0 1 30 0 -50 2 0 'SAB' '26'
         Label 5 -53 0 8388608 2 0 'G7'
         Label 37 -74 0 8388608 2 0 ''
         Symbol 19 15 -71 4 0 0 255 0
         Label 25 -74 0 8388608 2 0 '1'
         Pin 0 0 5 0 0 1 30 0 -80 2 0 'A1' '15'
         Symbol 2 -10 -82 6 0 0 255 0
         Symbol 10 2 -83 8 0 0 255 0
         Label 10 -83 0 8388608 2 0 '1'
         Label 57 -74 0 8388608 2 0 ''
         Label 45 -73 0 8388608 2 0 '5'
         Pin 0 0 0 0 0 1 30 80 -70 0 0 'B1' '42'
         Symbol 2 82 -72 6 0 0 255 0
         Label 65 -73 0 8388608 2 0 '4D'
         Label 57 -84 0 8388608 2 0 '1'
         Label 45 -83 0 8388608 2 0 '5/'
         Line 80 -80 93 -80 1 0 128 0
         Symbol 2 82 -82 6 0 0 255 0
         Line 93 -80 93 -70 1 0 128 0
         Junction 93 -70 0 128 0
         Label 15 -94 0 8388608 2 0 ''
         Symbol 19 50 -91 4 0 0 255 0
         Label 60 -94 0 8388608 2 0 '1'
         Label 17 -94 0 8388608 2 0 ''
         Line -13 -90 0 -90 1 0 128 0
         Label 5 -93 0 8388608 2 0 '6D'
         Line -13 -90 -13 -80 1 0 128 0
         Junction -13 -80 0 128 0
         Label 30 -93 0 8388608 2 0 '7'
         Label 17 -104 0 8388608 2 0 '1'
         Line -13 -100 0 -100 1 0 128 0
         Line -13 -100 -13 -90 1 0 128 0
         Junction -13 -90 0 128 0
         Label 30 -103 0 8388608 2 0 '7/'
         Line 80 -100 93 -100 1 0 128 0
         Label 65 -103 0 8388608 2 0 '2'
         Symbol 10 70 -103 8 0 0 255 0
         Line 93 -100 93 -80 1 0 128 0
         Junction 93 -80 0 128 0
         Pin 0 0 5 0 0 1 30 0 -110 2 0 'A2' '16'
         Pin 0 0 0 0 0 1 30 80 -110 0 0 'B2' '41'
         Pin 0 0 5 0 0 1 30 0 -120 2 0 'A3' '17'
         Pin 0 0 0 0 0 1 30 80 -120 0 0 'B3' '40'
         Pin 0 0 5 0 0 1 30 0 -130 2 0 'A4' '19'
         Pin 0 0 0 0 0 1 30 80 -130 0 0 'B4' '38'
         Pin 0 0 5 0 0 1 30 0 -140 2 0 'A5' '20'
         Pin 0 0 0 0 0 1 30 80 -140 0 0 'B5' '37'
         Pin 0 0 5 0 0 1 30 0 -150 2 0 'A6' '21'
         Pin 0 0 0 0 0 1 30 80 -150 0 0 'B6' '36'
         Pin 0 0 5 0 0 1 30 0 -160 2 0 'A7' '23'
         Pin 0 0 0 0 0 1 30 80 -160 0 0 'B7' '34'
         Pin 0 0 5 0 0 1 30 0 -170 2 0 'A8' '24'
         Pin 0 0 0 0 0 1 30 80 -170 0 0 'B8' '33'
         Label 37 -184 0 8388608 2 0 ''
         Pin 0 0 7 1 0 1 30 0 -200 2 0 'VCC' '50'
         Pin 0 0 7 1 0 1 30 0 -210 2 0 'VCC' '35'
         Pin 0 0 7 1 0 1 30 0 -220 2 0 'VCC' '22'
         Pin 0 0 7 1 0 1 30 0 -230 2 0 'VCC' '7'
         Pin 0 0 7 1 0 1 30 80 -180 0 0 'GND' '4'
         Pin 0 0 7 1 0 1 30 80 -190 0 0 'GND' '11'
         Pin 0 0 7 1 0 1 30 80 -200 0 0 'GND' '18'
         Pin 0 0 7 1 0 1 30 80 -210 0 0 'GND' '25'
         Pin 0 0 7 1 0 1 30 80 -220 0 0 'GND' '53'
         Pin 0 0 7 1 0 1 30 80 -230 0 0 'GND' '46'
         Pin 0 0 7 1 0 1 30 80 -240 0 0 'GND' '39'
         Pin 0 0 7 1 0 1 30 80 -250 0 0 'GND' '32'
         Line 10 -65 10 -55 0 0 128 0
         Line 10 -55 0 -55 0 0 128 0
         Line 0 -55 0 5 0 0 128 0
         Line 0 5 80 5 0 0 128 0
         Line 80 5 80 -55 0 0 128 0
         Line 80 -55 70 -55 0 0 128 0
         Line 70 -55 70 -65 0 0 128 0
         Line 0 -65 80 -65 0 0 128 0
         Line 80 -175 80 -65 0 0 128 0
         Line 80 -105 0 -105 0 0 128 0
         Line 0 -175 0 -65 0 0 128 0
         Line 80 -85 0 -85 0 0 128 0
         Line 80 -75 40 -75 0 0 128 0
         Line 40 -105 40 -65 0 0 128 0
         Line 35 -70 45 -70 0 0 128 0
         Line 35 -80 45 -80 0 0 128 0
         Line 40 -95 0 -95 0 0 128 0
         Line 35 -90 45 -90 0 0 128 0
         Line 35 -100 45 -100 0 0 128 0
         Line 80 -115 0 -115 0 0 128 0
         Line 80 -125 0 -125 0 0 128 0
         Line 80 -135 0 -135 0 0 128 0
         Line 80 -145 0 -145 0 0 128 0
         Line 80 -155 0 -155 0 0 128 0
         Line 80 -165 0 -165 0 0 128 0
         Line 80 -175 0 -175 0 0 128 0
      EndIEEEPart
   EndComponent
  以上为一个元件说明,其中声明了两类元件,即74AC16652和74ACT16652,其定义中相应有两类实现,即两处Part,各Part中还有多个子Part,如NormalPart、EndDeMorganPart和IEEEPart,因之前未处理多个子Part,因此每个子Part均生成相应的多个子图元,导致管脚重复生成以致于重叠。
而Symbol与Junction之类的信息,均为IEEEPart中的标识,以前未处理,以后也不准备处理,因此,应该忽略。
在此思路下,修改程序即可:
 
void __fastcall TLibEditForm::ReadComponent(TStrings * list, int& index)
{
   int count = list->Count;
   bool partFlag = false;
   TStrings * nameList = new TStringList;
   int unitIndex = 0;
   AnsiString description = "";
   AnsiString caption = "";
   for(int i = index; i < count; ++i)
   {
      AnsiString str = list->Strings[i].Trim();
      CBW_CONDITION_CONTINUE(str.Length() == 0);
      if(SameText(str, "Part"))
      {
         if(unitIndex >= nameList->Count) break;
         partFlag = true;
         NewUnit();
         TText * unitName = cCurrentUnit->UnitName;
         unitName->Top = 385;
         unitName->Left = 400;
         unitName->Caption = caption;
         cCurrentUnit->TypeName = nameList->Strings[unitIndex++];
         TreeView1->Items->Item[TreeView1->Items->Count - 1]->Text = cCurrentUnit->TypeName;
         cCurrentUnit->Description = description;
         continue;
      }
      if(SameText(str, "EndNormalPart")) partFlag = false;
      int offset = i - index;     
      if(offset > 19 && SameText(str, "EndComponent"))
      {
         index = i;
         break;
      }
      if(offset == 4)
         description = str;
      else if(offset == 17)
         caption = str;
      else if(offset == 19)
      {
         nameList->Add(str);
         ++index;
      }
      else if(partFlag)
         AddProtelLibObject(str);
   }
   if(cCurrentUnit->MetaNumber == 1)
      DeleteUnit();
   delete nameList;
}

编译测试,一切OK。

感谢MaC、GBChai和HHFeng发现问题并反馈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值