#============================================================================= # This is a ruby script that loads SiP 3D model into Google SketchUp6. # # design name: desc date: Thu Sep 11 12:27:29 JST 2008 # generated by: GemView V1.00, Gem Design Technologies, Inc. # taget SketchUp unit: inch # # (usage) # (1) start Google SketchUp # (2) setup the template if you havent do so. # perform Window/Preference/Template, select a template file with the target unit (see above). # you can modify it depending on your preference and store it as your own template file. # (3) open ruby-console by Window/Ruby console # close the Window/Outliner dialog if opened since it makes the script very slow. # (4) run the script by typing like 'load "C:/xxxx/filename.rb"' # you can omit 'C:/xxx/' part by storing the script file under 'Plugins' folder # in your SketchUp install folder (typically C:/Program Files/Google/Google SketchUp 6). # (5) patiently wait until the script completes. the progress is shown in the ruby console. # (6) the model is shown in default setting, e.g. bwires are shown but patterns are not shown. # you can use Window/Layer dialog to see other contents. Selected nets on GemView # can be highlighted by layer dialog. To highlight arbitrary nets, see detailed info(*1). # # (detailed info) # You can change view angle, move/rotate the model, measure distances, etc by usual operation. # Color/transparency can be controled by Window/Material dialog in object bases, or in # global way by Window/Style dialog. # The model is stored as a component with the design name, so you can # create another instance by Window/Component dialog. The inside of the data is # organized by group/component hierarchy, so you can find/modify the contents # by Window/Outliner dialog. Especially, substrate patterns and bwires are organized by # nettypes and nets, so you can highlight objects of specific nettype/net using Window/Outliner dialog, # although not very much nicely though.(*1) # The script is designed so that simply reloading the reviced file will work conveniently, as follows. # The existing component with the same design name will be replaced. # The corresponding instances if any are replaced at the same position/angle. # The material setting/layer visibility setting/sub-component definitions are re-used. # The running speed depends on the design size but we feel slow. The main reason we guess # is in SketchUp's housekeeping procedure for topological consistency, which should be the work # has to be done automatically upon insertion/deletion of the entities. # Then, no good ideas for speed up so far. Advices are appreciated. # For now, when making script file in GemView, select lighter setting for bigger designs, please. #============================================================================= # # remove hole faces, provided that this group consists of one outer face and 1+ hole faces. # def remove_holes(grp1) dels = [] grp1.entities.each do |e| next if (not e.is_a? Sketchup::Face) dels << e if (e.loops.length == 1) end grp1.entities.erase_entities(dels) if (not dels.empty?) end # # adds new level to the top of a building. # def pull_ceiling(grp1, face1, height, elays, flays, emats, fmats) vfs = [] grp1.entities.each do |e| if (e.is_a? Sketchup::Edge) e.vertices.each do |v| vfs << v if not vfs.include?(v) end elsif (e.is_a? Sketchup::Face) vfs << e if not vfs.include?(e) end end face1.reverse! if (face1.normal.dot(Z_AXIS)<0) face1.pushpull(height,true) ceiling = nil grp1.entities.each do |e| if (e.is_a? Sketchup::Edge) oldvcnt = 0 e.vertices.each { |v| oldvcnt = oldvcnt+1 if vfs.include?(v) } if (oldvcnt==1) e.layer = elays[0] e.material = emats[0] elsif (oldvcnt==0) e.layer = elays[1] e.material = emats[1] end elsif (e.is_a? Sketchup::Face) if (not vfs.include?(e)) norm = e.normal.dot(Z_AXIS) if (norm.abs<0.1) e.layer = flays[0] e.material = e.back_material = fmats[0] else e.reverse! if (norm<0) e.layer = flays[1] e.material = e.back_material = fmats[1] ceiling = e end end end end ceiling end # # erases floor and ceiling of a building (walls are left) # def erase_hor_faces(grp) dels = [] grp.entities.each do |e| if (e.is_a? Sketchup::Face) norm = e.normal.dot(Z_AXIS) dels << e if (norm<-0.99 || norm>0.99) end end grp.entities.erase_entities(dels) end # # remove spikes (edge with degree 1 vertex) in the constructing chain # def remove_spikes(grp) # remove vertices with degree other than 2. while true do dels = []; deg3edge = nil grp.entities.each do |e| next if not e.is_a? Sketchup::Edge p1 = e.start.position; p2 = e.end.position deg1 = e.start.edges.length; deg2 = e.end.edges.length if (((p1 == @p0 && p2 == @p9)||(p1 == @p9 && p2 == @p0)) && ((deg1<2&°2>=2)||(deg2<2&°1>=2))) # last line breaks the first edge, making (p0,p9) spike if (deg1<2) @p0 = @p9 else @p9 = @p0 end dels << e elsif ((p1 != @p0 && p1 != @p9 && deg1<2)||(p2 != @p0 && p2 != @p9 && deg2<2)) # spike found at some middle point dels << e elsif (deg1>2 || deg2>2) deg3edge = e end end if (not dels.empty?) grp.entities.erase_entities(dels) elsif (deg3edge) grp.entities.erase_entities(deg3edge) else break end end end # # add a line segment to the chain # def add_line_to_chain(grp, p1, p2, lay4fail) first = (grp.entities.length == 0) edge = grp.entities.add_line(p1,p2) edge.layer = lay4fail if (first) @p0 = edge.start.position @p9 = edge.end.position else if (edge.start.edges.length<2) line = grp.entities.add_line(@p9,edge.start.position) line.layer = lay4fail end @p9 = edge.end.position remove_spikes(grp) end end # # add an arc (series of edges in su) to the chain # def add_arc_to_chain(grp, cen, xaxis, normal, radius, startang, endang, p1, p2 ,lay4fail) first = (grp.entities.length == 0) arc = grp.entities.add_arc(cen,xaxis,normal,radius,startang,endang) if (not arc) # small ang, large radius arc sometimes fails. add_line_to_chain(grp,p1,p2,lay4fail) else arc.each {|e| e.layer = lay4fail} p0 = arc[0].start.position; p9 = arc[arc.length-1].end.position if (first) @p0 = p0 @p9 = p9 else if (arc[0].start.edges.length<2) line = grp.entities.add_line(@p9,p0) line.layer = lay4fail end @p9 = p9 remove_spikes(grp) end end end # # close the chain to form a ring topology. # def close_chain(grp, lay4fail) # close the gap, if any, between the end point and the start point of the chain if (@p0 != @p9) line = grp.entities.add_line(@p9,@p0) line.layer = lay4fail end @p0 = nil; @p9 = nil remove_spikes(grp) # collect edges edges = [] grp.entities.each do |e| edges << e if (e.is_a? Sketchup::Edge) end edges end # # sets layers and materials to edges and faces # def set_lay_and_mat(grp, elay, flay, emat, fmat) grp.entities.each do |e| if (e.is_a? Sketchup::Edge) e.layer = elay e.material = emat elsif (e.is_a? Sketchup::Face) e.layer = flay e.material = fmat e.back_material = fmat end end end # # softens (invisualizes) the edges # def soften_edges(grp) grp.entities.each do |e| e.soft = true if (e.is_a? Sketchup::Edge) end end #============================================================================= # making SiP (System-in-Package) 3D model. #============================================================================= def make_sip_model require "sketchup.rb" model = Sketchup.active_model # replace existing instances if any (remove here, and replace later) inss = []; dels = [] model.active_entities.each do |e| next if not e.is_a? Sketchup::ComponentInstance next if not e.definition.name == "desc" inss << e.name inss << e.transformation dels << e end # replace existing models if any (remove here, and replace later) if ((not dels.empty?) || model.definitions["desc"]) print "replacing existing data (removing now, and will replace later)..\n" model.active_entities.erase_entities(dels) if (not dels.empty?) model.definitions.purge_unused end # make sip model in group gpdb0 layer = model.layers["00 desc"] if (not layer) layer = model.layers.add("00 desc") rc = layer.visible = true end gpdb0 = model.entities.add_group gpdb0.name = "desc" gpdb0.layer = "00 desc" # subst shape (z range = from bottom of bottom conductor layer to top of top conductor layer) subst = gpdb0.entities.add_group subst.name = "subst and mold" subst.layer = model.layers[0] layer = model.layers["60 subst (wireframe)"] if (not layer) layer = model.layers.add("60 subst (wireframe)") rc = layer.visible = true end layer = model.layers["61 subst (surface)"] if (not layer) layer = model.layers.add("61 subst (surface)") rc = layer.visible = false end material = model.materials["solidedge"] if (not material) material = model.materials.add("solidedge") material.alpha = 1.0 material.color = 0x000000 end material = model.materials["subst"] if (not material) material = model.materials.add("subst") material.alpha = 0.4 material.color = 0x3f3f3f end outhorwk = subst.entities.add_group outhorwk.name = "outhorwk" outhorwk.layer = model.layers[0] add_line_to_chain(outhorwk,[-2500.0.inch,-2500.0.inch,0.0.inch],[2500.0.inch,-2500.0.inch,0.0.inch],"60 subst (wireframe)") add_line_to_chain(outhorwk,[2500.0.inch,-2500.0.inch,0.0.inch],[2500.0.inch,2500.0.inch,0.0.inch],"60 subst (wireframe)") add_line_to_chain(outhorwk,[2500.0.inch,2500.0.inch,0.0.inch],[-2500.0.inch,2500.0.inch,0.0.inch],"60 subst (wireframe)") add_line_to_chain(outhorwk,[-2500.0.inch,2500.0.inch,0.0.inch],[-2500.0.inch,-2500.0.inch,0.0.inch],"60 subst (wireframe)") edges = close_chain(outhorwk,"60 subst (wireframe)") face = outhorwk.entities.add_face(edges) set_lay_and_mat(outhorwk,"60 subst (wireframe)","61 subst (surface)","solidedge","subst") outhorwk.explode face = pull_ceiling(subst,face,240.0.inch,["60 subst (wireframe)","60 subst (wireframe)"],["61 subst (surface)","61 subst (surface)"],["solidedge","solidedge"],["subst","subst"]) # package mold layer = model.layers["10 pkg mold (wireframe)"] if (not layer) layer = model.layers.add("10 pkg mold (wireframe)") rc = layer.visible = false end layer = model.layers["11 pkg mold (surface)"] if (not layer) layer = model.layers.add("11 pkg mold (surface)") rc = layer.visible = false end material = model.materials["mold"] if (not material) material = model.materials.add("mold") material.alpha = 0.4 material.color = 0x404040 end face = pull_ceiling(subst,face,560.0.inch,["10 pkg mold (wireframe)","10 pkg mold (wireframe)"],["11 pkg mold (surface)","11 pkg mold (surface)"],["mold","mold"],["mold","mold"]) # dielectric layers diele = gpdb0.entities.add_group diele.name = "dielectric layers" diele.layer = model.layers[0] # dielectric layer 1-2 layer = model.layers["50 dielectric layer 1-2"] if (not layer) layer = model.layers.add("50 dielectric layer 1-2") rc = layer.visible = false end material = model.materials["diele"] if (not material) material = model.materials.add("diele") material.alpha = 0.4 material.color = 0x104060 end tmp = diele.entities.add_group tmp.name = "tmp" tmp.layer = model.layers[0] outhorwk = tmp.entities.add_group outhorwk.name = "outhorwk" outhorwk.layer = model.layers[0] add_line_to_chain(outhorwk,[-2500.0.inch,-2500.0.inch,20.0.inch],[2500.0.inch,-2500.0.inch,20.0.inch],"50 dielectric layer 1-2") add_line_to_chain(outhorwk,[2500.0.inch,-2500.0.inch,20.0.inch],[2500.0.inch,2500.0.inch,20.0.inch],"50 dielectric layer 1-2") add_line_to_chain(outhorwk,[2500.0.inch,2500.0.inch,20.0.inch],[-2500.0.inch,2500.0.inch,20.0.inch],"50 dielectric layer 1-2") add_line_to_chain(outhorwk,[-2500.0.inch,2500.0.inch,20.0.inch],[-2500.0.inch,-2500.0.inch,20.0.inch],"50 dielectric layer 1-2") edges = close_chain(outhorwk,"50 dielectric layer 1-2") face = outhorwk.entities.add_face(edges) set_lay_and_mat(outhorwk,"50 dielectric layer 1-2","50 dielectric layer 1-2","diele","diele") outhorwk.explode face = pull_ceiling(tmp,face,200.0.inch,["50 dielectric layer 1-2","50 dielectric layer 1-2"],["50 dielectric layer 1-2","50 dielectric layer 1-2"],["diele","diele"],["diele","diele"]) tmp.explode layer = model.layers["02 die1"] if (not layer) layer = model.layers.add("02 die1") rc = layer.visible = true end die = gpdb0.entities.add_group die.name = "die1" die.layer = "02 die1" print "loading die1 ..\n" bulk = die.entities.add_group bulk.name = "bulk" bulk.layer = model.layers[0] layer = model.layers["20 die bulk (wireframe)"] if (not layer) layer = model.layers.add("20 die bulk (wireframe)") rc = layer.visible = true end layer = model.layers["21 die bulk (surface)"] if (not layer) layer = model.layers.add("21 die bulk (surface)") rc = layer.visible = true end material = model.materials["die"] if (not material) material = model.materials.add("die") material.alpha = 0.5 material.color = 0x7f7f7f end # die bulk outhorwk = bulk.entities.add_group outhorwk.name = "outhorwk" outhorwk.layer = model.layers[0] add_line_to_chain(outhorwk,[-1000.0.inch,-1250.0.inch,280.0.inch],[1000.0.inch,-1250.0.inch,280.0.inch],"20 die bulk (wireframe)") add_line_to_chain(outhorwk,[1000.0.inch,-1250.0.inch,280.0.inch],[1000.0.inch,1250.0.inch,280.0.inch],"20 die bulk (wireframe)") add_line_to_chain(outhorwk,[1000.0.inch,1250.0.inch,280.0.inch],[-1000.0.inch,1250.0.inch,280.0.inch],"20 die bulk (wireframe)") add_line_to_chain(outhorwk,[-1000.0.inch,1250.0.inch,280.0.inch],[-1000.0.inch,-1250.0.inch,280.0.inch],"20 die bulk (wireframe)") edges = close_chain(outhorwk,"20 die bulk (wireframe)") face = outhorwk.entities.add_face(edges) set_lay_and_mat(outhorwk,"20 die bulk (wireframe)","21 die bulk (surface)","solidedge","die") outhorwk.explode face = pull_ceiling(bulk,face,200.0.inch,["20 die bulk (wireframe)","20 die bulk (wireframe)"],["21 die bulk (surface)","21 die bulk (surface)"],["solidedge","solidedge"],["die","die"]) diepads = die.entities.add_group diepads.name = "diepads" diepads.layer = model.layers[0] # diepads # d:die1/1 material = model.materials["sig"] if (not material) material = model.materials.add("sig") material.alpha = 0.8 material.color = [191,145,59] end comp = model.definitions["dp_sig_rect_w300h200t0r0"] if (not comp) tmp = diepads.entities.add_group tmp.name = "tmp" tmp.layer = model.layers[0] face = tmp.entities.add_face([-150.0.inch,-100.0.inch,0],[150.0.inch,-100.0.inch,0],[150.0.inch,100.0.inch,0],[-150.0.inch,100.0.inch,0]) tmp.entities.each do |e| if (e.is_a? Sketchup::Face) e.layer = "20 die bulk (wireframe)" e.material = "sig" e.back_material = "sig" elsif (e.is_a? Sketchup::Edge) e.layer = "20 die bulk (wireframe)" e.material = "solidedge" end end ins = tmp.to_component comp = ins.definition comp.name = "dp_sig_rect_w300h200t0r0" diepads.entities.erase_entities(ins) end # if (not comp) ins = diepads.entities.add_instance(comp,Geom::Transformation.translation([700.0.inch,-400.0.inch,480.0.inch])) ins.name = "d:die1/1" # d:die1/10 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,4.71238898038469)) ins.transform!(Geom::Transformation.translation([200.0.inch,-950.0.inch,480.0.inch])) ins.name = "d:die1/10" # d:die1/2 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.translation([700.0.inch,0.0.inch,480.0.inch])) ins.name = "d:die1/2" # d:die1/3 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.translation([700.0.inch,400.0.inch,480.0.inch])) ins.name = "d:die1/3" # d:die1/4 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,1.5707963267948966)) ins.transform!(Geom::Transformation.translation([200.0.inch,950.0.inch,480.0.inch])) ins.name = "d:die1/4" # d:die1/5 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,1.5707963267948966)) ins.transform!(Geom::Transformation.translation([-200.0.inch,950.0.inch,480.0.inch])) ins.name = "d:die1/5" # d:die1/6 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,3.141592653589793)) ins.transform!(Geom::Transformation.translation([-700.0.inch,400.0.inch,480.0.inch])) ins.name = "d:die1/6" # d:die1/7 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,3.141592653589793)) ins.transform!(Geom::Transformation.translation([-700.0.inch,0.0.inch,480.0.inch])) ins.name = "d:die1/7" # d:die1/8 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,3.141592653589793)) ins.transform!(Geom::Transformation.translation([-700.0.inch,-400.0.inch,480.0.inch])) ins.name = "d:die1/8" # d:die1/9 comp = model.definitions["dp_sig_rect_w300h200t0r0"] ins = diepads.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,4.71238898038469)) ins.transform!(Geom::Transformation.translation([-200.0.inch,-950.0.inch,480.0.inch])) ins.name = "d:die1/9" nets = gpdb0.entities.add_group nets.name = "pattern and bwires" nets.layer = model.layers[0] print "loading sig ..\n" nettype = nets.entities.add_group nettype.name = "sig" nettype.layer = model.layers[0] print "loading sig1 (1/10) .. \n" net = nettype.entities.add_group net.name = "sig1" net.layer = model.layers[0] # p:die1/_9 (land) layer = model.layers["40 conductor layer 1"] if (not layer) layer = model.layers.add("40 conductor layer 1") rc = layer.visible = false end land = net.entities.add_group land.name = "p:die1/_9 land" land.layer = model.layers[0] ringwk = land.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[1500.0.inch,-1300.0.inch,220.0.inch],[2400.0.inch,-1300.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[2400.0.inch,-1300.0.inch,220.0.inch],[2400.0.inch,-600.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[2400.0.inch,-600.0.inch,220.0.inch],[1800.0.inch,-600.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[1800.0.inch,-600.0.inch,220.0.inch],[1500.0.inch,-900.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[1500.0.inch,-900.0.inch,220.0.inch],[1500.0.inch,-1300.0.inch,220.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(land,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(land,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) layer = model.layers["31 bonding plate"] if (not layer) layer = model.layers.add("31 bonding plate") rc = layer.visible = false end material = model.materials["btplate"] if (not material) material = model.materials.add("btplate") material.alpha = 1.0 material.color = 0x60d0d0 end face = pull_ceiling(land,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) # bwire (d:die1/1,p:die1/_9) bwire = net.entities.add_group bwire.name = "bw (d:die1/1,p:die1/_9)" bwire.layer = model.layers[0] layer = model.layers["30 bwire stk1,stg0"] if (not layer) layer = model.layers.add("30 bwire stk1,stg0") rc = layer.visible = true end material = model.materials["sig(bwire)"] if (not material) material = model.materials.add("sig(bwire)") material.alpha = 0.8 material.color = [191,145,59] end edges = [] edge = bwire.entities.add_line([700.0.inch,-400.0.inch,480.0.inch],[704.6.inch,-402.6.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([704.6.inch,-402.6.inch,559.5.inch],[1049.4.inch,-594.1.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([1049.4.inch,-594.1.inch,626.4.inch],[1448.0.inch,-815.5.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([1448.0.inch,-815.5.inch,528.8.inch],[1588.9.inch,-893.8.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([1588.9.inch,-893.8.inch,458.9.inch],[1782.8.inch,-1001.5.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([1782.8.inch,-1001.5.inch,324.5.inch],[1902.0.inch,-1067.7.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading VSS1 (2/10) .. \n" net = nettype.entities.add_group net.name = "VSS1" net.layer = model.layers[0] # p:die1/_4 (land) land = net.entities.add_group land.name = "p:die1/_4 land" land.layer = model.layers[0] ringwk = land.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[-2400.0.inch,600.0.inch,220.0.inch],[-1900.0.inch,600.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1900.0.inch,600.0.inch,220.0.inch],[-1800.0.inch,700.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1800.0.inch,700.0.inch,220.0.inch],[-1500.0.inch,700.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1500.0.inch,700.0.inch,220.0.inch],[-1500.0.inch,1200.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1500.0.inch,1200.0.inch,220.0.inch],[-1700.0.inch,1200.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1700.0.inch,1200.0.inch,220.0.inch],[-1900.0.inch,1400.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1900.0.inch,1400.0.inch,220.0.inch],[-2400.0.inch,1400.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-2400.0.inch,1400.0.inch,220.0.inch],[-2400.0.inch,600.0.inch,220.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(land,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(land,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(land,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) # bwire (d:die1/6,p:die1/_4) bwire = net.entities.add_group bwire.name = "bw (d:die1/6,p:die1/_4)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([-700.0.inch,400.0.inch,480.0.inch],[-704.7.inch,402.1.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([-704.7.inch,402.1.inch,559.5.inch],[-1052.2.inch,555.9.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([-1052.2.inch,555.9.inch,626.4.inch],[-1473.0.inch,742.2.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([-1473.0.inch,742.2.inch,528.8.inch],[-1621.8.inch,808.0.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([-1621.8.inch,808.0.inch,458.9.inch],[-1826.5.inch,898.6.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([-1826.5.inch,898.6.inch,324.5.inch],[-1952.3.inch,954.3.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading sig2 (3/10) .. \n" net = nettype.entities.add_group net.name = "sig2" net.layer = model.layers[0] # p:die1/_10 (land) comp = model.definitions["sig_lay1_btplate20_tes_rectline_a500t20len400"] if (not comp) compwk = net.entities.add_group compwk.name = "compwk" compwk.layer = model.layers[0] ringwk = compwk.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[-450.0.inch,250.0.inch,0.0.inch],[-450.0.inch,-250.0.inch,0.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-450.0.inch,-250.0.inch,0.0.inch],[450.0.inch,-250.0.inch,0.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[450.0.inch,-250.0.inch,0.0.inch],[450.0.inch,250.0.inch,0.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[450.0.inch,250.0.inch,0.0.inch],[-450.0.inch,250.0.inch,0.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(compwk,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(compwk,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(compwk,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) ins = compwk.to_component comp = ins.definition comp.name = "sig_lay1_btplate20_tes_rectline_a500t20len400" net.entities.erase_entities(ins) end # if (not comp) ins = net.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,3.141592653589793)) ins.transform!(Geom::Transformation.translation([1950.0.inch,50.0.inch,220.0.inch])) ins.name = "p:die1/_10 land" # bwire (d:die1/2,p:die1/_10) bwire = net.entities.add_group bwire.name = "bw (d:die1/2,p:die1/_10)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([700.0.inch,0.0.inch,480.0.inch],[704.6.inch,0.0.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([704.6.inch,0.0.inch,559.5.inch],[1049.4.inch,-3.7.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([1049.4.inch,-3.7.inch,626.4.inch],[1448.0.inch,-7.8.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([1448.0.inch,-7.8.inch,528.8.inch],[1588.9.inch,-9.3.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([1588.9.inch,-9.3.inch,458.9.inch],[1782.8.inch,-11.4.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([1782.8.inch,-11.4.inch,324.5.inch],[1902.0.inch,-12.6.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading sig3 (4/10) .. \n" net = nettype.entities.add_group net.name = "sig3" net.layer = model.layers[0] # p:die1/_2 (land) land = net.entities.add_group land.name = "p:die1/_2 land" land.layer = model.layers[0] ringwk = land.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[1500.0.inch,800.0.inch,220.0.inch],[2400.0.inch,800.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[2400.0.inch,800.0.inch,220.0.inch],[2400.0.inch,1700.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[2400.0.inch,1700.0.inch,220.0.inch],[1700.0.inch,1700.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[1700.0.inch,1700.0.inch,220.0.inch],[1500.0.inch,1500.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[1500.0.inch,1500.0.inch,220.0.inch],[1500.0.inch,800.0.inch,220.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(land,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(land,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(land,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) # bwire (d:die1/3,p:die1/_2) bwire = net.entities.add_group bwire.name = "bw (d:die1/3,p:die1/_2)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([700.0.inch,400.0.inch,480.0.inch],[704.6.inch,403.9.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([704.6.inch,403.9.inch,559.5.inch],[1049.4.inch,693.0.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([1049.4.inch,693.0.inch,626.4.inch],[1448.0.inch,1027.2.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([1448.0.inch,1027.2.inch,528.8.inch],[1588.9.inch,1145.3.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([1588.9.inch,1145.3.inch,458.9.inch],[1782.8.inch,1307.9.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([1782.8.inch,1307.9.inch,324.5.inch],[1902.0.inch,1407.8.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading sig4 (5/10) .. \n" net = nettype.entities.add_group net.name = "sig4" net.layer = model.layers[0] # p:die1/_3 (land) land = net.entities.add_group land.name = "p:die1/_3 land" land.layer = model.layers[0] ringwk = land.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[-1400.0.inch,2400.0.inch,220.0.inch],[-1400.0.inch,1500.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1400.0.inch,1500.0.inch,220.0.inch],[-1000.0.inch,1500.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1000.0.inch,1500.0.inch,220.0.inch],[-700.0.inch,1800.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-700.0.inch,1800.0.inch,220.0.inch],[-700.0.inch,2400.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-700.0.inch,2400.0.inch,220.0.inch],[-1400.0.inch,2400.0.inch,220.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(land,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(land,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(land,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) # bwire (d:die1/5,p:die1/_3) bwire = net.entities.add_group bwire.name = "bw (d:die1/5,p:die1/_3)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([-200.0.inch,950.0.inch,480.0.inch],[-204.0.inch,954.6.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([-204.0.inch,954.6.inch,559.5.inch],[-495.1.inch,1293.9.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([-495.1.inch,1293.9.inch,626.4.inch],[-798.8.inch,1647.9.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([-798.8.inch,1647.9.inch,528.8.inch],[-906.2.inch,1773.0.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([-906.2.inch,1773.0.inch,458.9.inch],[-1054.0.inch,1945.3.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([-1054.0.inch,1945.3.inch,324.5.inch],[-1144.8.inch,2051.1.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading sig5 (6/10) .. \n" net = nettype.entities.add_group net.name = "sig5" net.layer = model.layers[0] # p:die1/_5 (land) comp = model.definitions["sig_lay1_btplate20_tes_rectline_a500t20len200"] if (not comp) compwk = net.entities.add_group compwk.name = "compwk" compwk.layer = model.layers[0] ringwk = compwk.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[-350.0.inch,250.0.inch,0.0.inch],[-350.0.inch,-250.0.inch,0.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-350.0.inch,-250.0.inch,0.0.inch],[350.0.inch,-250.0.inch,0.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[350.0.inch,-250.0.inch,0.0.inch],[350.0.inch,250.0.inch,0.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[350.0.inch,250.0.inch,0.0.inch],[-350.0.inch,250.0.inch,0.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(compwk,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(compwk,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(compwk,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) ins = compwk.to_component comp = ins.definition comp.name = "sig_lay1_btplate20_tes_rectline_a500t20len200" net.entities.erase_entities(ins) end # if (not comp) ins = net.entities.add_instance(comp,Geom::Transformation.rotation([0,0,0],Z_AXIS,3.141592653589793)) ins.transform!(Geom::Transformation.translation([-2050.0.inch,50.0.inch,220.0.inch])) ins.name = "p:die1/_5 land" # bwire (d:die1/7,p:die1/_5) bwire = net.entities.add_group bwire.name = "bw (d:die1/7,p:die1/_5)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([-700.0.inch,0.0.inch,480.0.inch],[-704.6.inch,0.0.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([-704.6.inch,0.0.inch,559.5.inch],[-1052.2.inch,3.5.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([-1052.2.inch,3.5.inch,626.4.inch],[-1473.0.inch,7.8.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([-1473.0.inch,7.8.inch,528.8.inch],[-1621.8.inch,9.3.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([-1621.8.inch,9.3.inch,458.9.inch],[-1826.5.inch,11.3.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([-1826.5.inch,11.3.inch,324.5.inch],[-1952.3.inch,12.6.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading sig6 (7/10) .. \n" net = nettype.entities.add_group net.name = "sig6" net.layer = model.layers[0] # p:die1/_6 (land) land = net.entities.add_group land.name = "p:die1/_6 land" land.layer = model.layers[0] ringwk = land.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[-2400.0.inch,-1700.0.inch,220.0.inch],[-1800.0.inch,-1700.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1800.0.inch,-1700.0.inch,220.0.inch],[-1500.0.inch,-1400.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1500.0.inch,-1400.0.inch,220.0.inch],[-1500.0.inch,-600.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1500.0.inch,-600.0.inch,220.0.inch],[-2200.0.inch,-600.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-2200.0.inch,-600.0.inch,220.0.inch],[-2400.0.inch,-800.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-2400.0.inch,-800.0.inch,220.0.inch],[-2400.0.inch,-1700.0.inch,220.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(land,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(land,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(land,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) # bwire (d:die1/8,p:die1/_6) bwire = net.entities.add_group bwire.name = "bw (d:die1/8,p:die1/_6)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([-700.0.inch,-400.0.inch,480.0.inch],[-704.6.inch,-402.6.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([-704.6.inch,-402.6.inch,559.5.inch],[-1052.2.inch,-598.4.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([-1052.2.inch,-598.4.inch,626.4.inch],[-1473.0.inch,-835.5.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([-1473.0.inch,-835.5.inch,528.8.inch],[-1621.8.inch,-919.3.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([-1621.8.inch,-919.3.inch,458.9.inch],[-1826.5.inch,-1034.6.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([-1826.5.inch,-1034.6.inch,324.5.inch],[-1952.3.inch,-1105.5.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading sig7 (8/10) .. \n" net = nettype.entities.add_group net.name = "sig7" net.layer = model.layers[0] # p:die1/_7 (land) land = net.entities.add_group land.name = "p:die1/_7 land" land.layer = model.layers[0] ringwk = land.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[-1700.0.inch,-2400.0.inch,220.0.inch],[-400.0.inch,-2400.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-400.0.inch,-2400.0.inch,220.0.inch],[-400.0.inch,-1700.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-400.0.inch,-1700.0.inch,220.0.inch],[-1200.0.inch,-1700.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1200.0.inch,-1700.0.inch,220.0.inch],[-1700.0.inch,-2200.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[-1700.0.inch,-2200.0.inch,220.0.inch],[-1700.0.inch,-2400.0.inch,220.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(land,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(land,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(land,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) # bwire (d:die1/9,p:die1/_7) bwire = net.entities.add_group bwire.name = "bw (d:die1/9,p:die1/_7)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([-200.0.inch,-950.0.inch,480.0.inch],[-203.6.inch,-954.7.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([-203.6.inch,-954.7.inch,559.5.inch],[-466.9.inch,-1297.4.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([-466.9.inch,-1297.4.inch,626.4.inch],[-760.3.inch,-1679.2.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([-760.3.inch,-1679.2.inch,528.8.inch],[-864.0.inch,-1814.2.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([-864.0.inch,-1814.2.inch,458.9.inch],[-1006.7.inch,-2000.0.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([-1006.7.inch,-2000.0.inch,324.5.inch],[-1094.4.inch,-2114.1.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading sig8 (9/10) .. \n" net = nettype.entities.add_group net.name = "sig8" net.layer = model.layers[0] # p:die1/_8 (land) land = net.entities.add_group land.name = "p:die1/_8 land" land.layer = model.layers[0] ringwk = land.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[900.0.inch,-2400.0.inch,220.0.inch],[2400.0.inch,-2400.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[2400.0.inch,-2400.0.inch,220.0.inch],[2400.0.inch,-1500.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[2400.0.inch,-1500.0.inch,220.0.inch],[1100.0.inch,-1500.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[1100.0.inch,-1500.0.inch,220.0.inch],[800.0.inch,-1800.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[800.0.inch,-1800.0.inch,220.0.inch],[800.0.inch,-2300.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[800.0.inch,-2300.0.inch,220.0.inch],[900.0.inch,-2400.0.inch,220.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(land,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(land,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(land,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) # bwire (d:die1/10,p:die1/_8) bwire = net.entities.add_group bwire.name = "bw (d:die1/10,p:die1/_8)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([200.0.inch,-950.0.inch,480.0.inch],[204.7.inch,-954.7.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([204.7.inch,-954.7.inch,559.5.inch],[553.4.inch,-1297.4.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([553.4.inch,-1297.4.inch,626.4.inch],[941.8.inch,-1679.2.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([941.8.inch,-1679.2.inch,528.8.inch],[1079.1.inch,-1814.2.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([1079.1.inch,-1814.2.inch,458.9.inch],[1268.1.inch,-2000.0.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([1268.1.inch,-2000.0.inch,324.5.inch],[1384.2.inch,-2114.1.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading VDD1 (10/10) .. \n" net = nettype.entities.add_group net.name = "VDD1" net.layer = model.layers[0] # p:die1/_1 (land) land = net.entities.add_group land.name = "p:die1/_1 land" land.layer = model.layers[0] ringwk = land.entities.add_group ringwk.name = "ringwk" ringwk.layer = model.layers[0] add_line_to_chain(ringwk,[100.0.inch,1500.0.inch,220.0.inch],[1100.0.inch,1500.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[1100.0.inch,1500.0.inch,220.0.inch],[1500.0.inch,1900.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[1500.0.inch,1900.0.inch,220.0.inch],[2400.0.inch,1900.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[2400.0.inch,1900.0.inch,220.0.inch],[2400.0.inch,2400.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[2400.0.inch,2400.0.inch,220.0.inch],[100.0.inch,2400.0.inch,220.0.inch],"40 conductor layer 1") add_line_to_chain(ringwk,[100.0.inch,2400.0.inch,220.0.inch],[100.0.inch,1500.0.inch,220.0.inch],"40 conductor layer 1") edges = close_chain(ringwk,"40 conductor layer 1") face = ringwk.entities.add_face(edges) ringwk.explode if (face) set_lay_and_mat(land,"40 conductor layer 1","40 conductor layer 1","sig","sig") end # if (face) face = pull_ceiling(land,face,20.0.inch,["40 conductor layer 1","60 subst (wireframe)"],["40 conductor layer 1","40 conductor layer 1"],["sig","solidedge"],["sig","sig"]) face = pull_ceiling(land,face,20.0.inch,["31 bonding plate","31 bonding plate"],["31 bonding plate","31 bonding plate"],["btplate","btplate"],["btplate","btplate"]) # bwire (d:die1/4,p:die1/_1) bwire = net.entities.add_group bwire.name = "bw (d:die1/4,p:die1/_1)" bwire.layer = model.layers[0] edges = [] edge = bwire.entities.add_line([200.0.inch,950.0.inch,480.0.inch],[203.0.inch,954.7.inch,559.5.inch]) edges << edge edge = bwire.entities.add_line([203.0.inch,954.7.inch,559.5.inch],[420.3.inch,1293.9.inch,626.4.inch]) edges << edge edge = bwire.entities.add_line([420.3.inch,1293.9.inch,626.4.inch],[647.1.inch,1647.9.inch,528.8.inch]) edges << edge edge = bwire.entities.add_line([647.1.inch,1647.9.inch,528.8.inch],[727.3.inch,1773.0.inch,458.9.inch]) edges << edge edge = bwire.entities.add_line([727.3.inch,1773.0.inch,458.9.inch],[837.6.inch,1945.3.inch,324.5.inch]) edges << edge edge = bwire.entities.add_line([837.6.inch,1945.3.inch,324.5.inch],[905.4.inch,2051.1.inch,260.0.inch]) edges << edge normal = edges[0].vertices[1].position - edges[0].vertices[0].position circle = bwire.entities.add_circle(edges[0].vertices[0].position,normal,15.0.inch) face = bwire.entities.add_face(circle) face.followme(edges) bwire.entities.erase_entities(edges) set_lay_and_mat(bwire,"30 bwire stk1,stg0","30 bwire stk1,stg0","sig(bwire)","sig(bwire)") print "loading isolated objects..\n" isolated = nets.entities.add_group isolated.name = "isolated" isolated.layer = model.layers[0] fid = isolated.entities.add_group fid.name = "fid" fid.layer = model.layers[0] fid.explode if (fid.entities.count==0) plane = isolated.entities.add_group plane.name = "plane" plane.layer = model.layers[0] plane.explode if (plane.entities.count==0) ring = isolated.entities.add_group ring.name = "ring" ring.layer = model.layers[0] ring.explode if (ring.entities.count==0) bpad = isolated.entities.add_group bpad.name = "bpad" bpad.layer = model.layers[0] bpad.explode if (bpad.entities.count==0) ball = isolated.entities.add_group ball.name = "ball" ball.layer = model.layers[0] ball.explode if (ball.entities.count==0) via = isolated.entities.add_group via.name = "via" via.layer = model.layers[0] via.explode if (via.entities.count==0) pterm = isolated.entities.add_group pterm.name = "pterm" pterm.layer = model.layers[0] pterm.explode if (pterm.entities.count==0) rjump = isolated.entities.add_group rjump.name = "rjump" rjump.layer = model.layers[0] rjump.explode if (rjump.entities.count==0) eterm = isolated.entities.add_group eterm.name = "eterm" eterm.layer = model.layers[0] eterm.explode if (eterm.entities.count==0) etchbackline = isolated.entities.add_group etchbackline.name = "etchbackline" etchbackline.layer = model.layers[0] etchbackline.explode if (etchbackline.entities.count==0) etchbackring = isolated.entities.add_group etchbackring.name = "etchbackring" etchbackring.layer = model.layers[0] etchbackring.explode if (etchbackring.entities.count==0) isolated.explode if (isolated.entities.count==0) # sip model is made in group gpdb0 here. register it as a component ins = gpdb0.to_component comp = ins.definition comp.name = "desc" ins.name = "desc" # replace the existing instances if any if (not inss.empty?) print "replacing existing data..\n" model.entities.erase_entities(ins) until (inss.empty?) do name = inss.shift trans = inss.shift ins = model.entities.add_instance(comp,trans) ins.name = name end end rc = model.active_layer = model.layers[0] model.commit_operation end # make_sip_model #============================================================================= # the script starts here, when it is invoked by 'load' command, in ruby console. #============================================================================= if Sketchup.active_model.entities == Sketchup.active_model.active_entities make_sip_model print "load completed.\n" else print "close the group/component, pls.\n" UI.messagebox "close the group/component, pls." end