mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-04 18:06:22 +03:00
AIS_ColoredShape::Compute() - improve logic to split input shape into Closed and Open volumes with back-face culling enabled when possible. Change last argument of method StdPrs_ShadedShape::Add() from boolean to enumeration StdPrs_Volume which controls parsing of Closed/Open volumes within input shape. Make method StdPrs_ShadedShape::ExploreSolids() public. Extend Draw Harness command vaspects with option -setvisibility to hide subshape (using AIS_ColoredShape). Add new test cases bugs/bis/bug25687_1 and bugs/bis/bug25687_2. the logic of bindSubShapes method clarified Conflicts: src/AIS/AIS_ColoredShape.cxx AIS_ColoredShape::dispatchColors considers the colors of displayed shapes in connection with specific priority the color of specific shape can be exported from several ways: the color of this shape, the color of a compound containing this shape. The highest priority has the color of shape than the one of the compound. The color with highest priority will be displayed. This patch accounts for the highest priority of the shape color. For example: w - wire has GREEN color; e - edge has RED color; "w" contains "e"; all edges of "w" will be displayed in GREEN color except "e" edge, it will be displayed in RED color Added sample generating model of Intel i7-4790 CPU on which the problem can be reproduced
331 lines
10 KiB
Tcl
331 lines
10 KiB
Tcl
# Sample model of Intel i7-4790 CPU
|
|
# Dimensions are taken from specs and foto found in Internet
|
|
|
|
#Category: XDE
|
|
#Title: Intel i7-4790 CPU
|
|
|
|
pload MODELING VISUALIZATION XDE
|
|
|
|
puts "Making board..."
|
|
|
|
# board is rectangle 37.5 x 37.5 mm with semi-round holes on two sides;
|
|
# assumed board thickness is 1 mm
|
|
dset L 37.5
|
|
dset t 1.
|
|
polyline pboard 0 0 0 L 0 0 L L 0 0 L 0 0 0 0
|
|
mkplane fboard pboard
|
|
circle cslot -0.2 32.2 0 1
|
|
mkedge eslot cslot
|
|
wire wslot eslot
|
|
mkplane fslot wslot
|
|
bcut fboard fboard fslot
|
|
ttranslate fslot L+0.4 0 0
|
|
bcut fboard fboard fslot
|
|
prism board fboard 0 0 t
|
|
|
|
# make faces representing dard-green parts of the board sides
|
|
mkoffset dgbot fboard 1 -0.5
|
|
mkplane dgbot dgbot_1
|
|
tcopy dgbot dgtop
|
|
ttranslate dgtop 0 0 0.5*t
|
|
box aux 36.6 17.7 0 10 8.4 2*t
|
|
bcut dgtop dgtop aux
|
|
prism pbot dgbot 0 0 0.5*t
|
|
prism ptop dgtop 0 0 0.5*t
|
|
bfuse board board pbot
|
|
bfuse board board ptop
|
|
|
|
# add triangular faces indicating base corner of the plate
|
|
polyline btri 0.5 0.5 0 1.5 0.5 0 0.5 1.5 0 0.5 0.5 0
|
|
polyline ttri 0.5 0.5 t 2.5 0.5 t 0.5 2.5 t 0.5 0.5 t
|
|
thrusections stri 1 1 btri ttri
|
|
bfuse board board stri
|
|
|
|
explode board so
|
|
renamevar board_1 board
|
|
|
|
puts "Making case..."
|
|
|
|
# case is made of two filleted prisms, base and top
|
|
polyline lbase 3.4 1.8 t L-3.4 1.8 t L-3.4 11.4 t L-1.8 11.4 t L-1.8 25.2 t \
|
|
L-3.4 25.2 t L-3.4 L-3 t 3.4 L-3 t 3.4 25.2 t \
|
|
1.8 25.2 t 1.8 11.4 t 3.4 11.4 t 3.4 1.8 t
|
|
mkplane f lbase
|
|
explode f e
|
|
chfi2d fbase f f_1 f_2 F 1.3 f_2 f_3 F 0.7 f_3 f_4 F 0.7 f_4 f_5 F 0.7 \
|
|
f_5 f_6 F 0.7 f_6 f_7 F 1.3 f_7 f_8 F 1.3 f_8 f_9 F 0.7 \
|
|
f_9 f_10 F 0.7 f_10 f_11 F 0.7 f_11 f_12 F 0.7 f_12 f_1 F 1.3
|
|
|
|
polyline ltop 4. 3.4 t L-4 3.4 t L-4 L-4.8 t 4 L-4.8 t 4. 3.4 t
|
|
mkplane f ltop
|
|
explode f e
|
|
chfi2d ftop f f_1 f_2 F 1.6 f_2 f_3 F 1.6 f_3 f_4 F 1.6 f_4 f_1 F 1.6
|
|
|
|
# make case, assume height of base 1 mm and top additional 2.5 mm
|
|
prism pbase fbase 0 0 1
|
|
prism ptop ftop 0 0 3.5
|
|
bfuse case pbase ptop
|
|
|
|
explode case so
|
|
renamevar case_1 case
|
|
|
|
# write text on top of the case
|
|
# note that font is chosen by availability of Unicode symbols,
|
|
# it is different from actual font found on processor
|
|
set font "Arial Unicode MS"
|
|
#set text "i\u24c2\u00a911\nINTEL\u00ae CORE\u2122 i7-4790\nSR1QF 3.60GHZ\nMALAY\nL411B540 \u24d4"
|
|
#text2brep title $text "Arial Unicode MS" 1.7 x=10 y=24 z=4.51
|
|
# alternative variant to work-around issue #25852
|
|
set text "i\u20dd\u20dd11\nINTEL\u20dd CORE\u2122 i7-4790\nSR1QF 3.60GHZ\nMALAY\nL411B540 \u20dd"
|
|
text2brep title0 $text $font 1.7 x=10 y=24 z=4.51
|
|
text2brep title1 " M C" $font 0.77 x=10 y=24.2 z=4.51
|
|
text2brep title2 "R" $font 0.77 x=15.3 y=21.9 z=4.51
|
|
text2brep title3 "e4" $font 0.7 x=18.6 y=15.1 z=4.51
|
|
compound title0 title1 title2 title3 title
|
|
|
|
puts "Adding contact pads..."
|
|
|
|
# contact pads on top side (round); we need 42 with R=0.3 and 1 with R=0.6
|
|
pcylinder rpad 0.27 0.1
|
|
eval compound [lrepeat 42 rpad] cpad
|
|
set lpad [explode cpad]
|
|
for {set i 1} {$i <= 20} {incr i} {
|
|
ttranslate cpad_[expr 2*$i ] [expr 4.5 + $i * 0.7] L-0.7 t
|
|
ttranslate cpad_[expr 2*$i-1] [expr 4.85 + $i * 0.7] L-1.3 t
|
|
}
|
|
ttranslate cpad_41 L-0.7 L-0.7 t
|
|
ttranslate cpad_42 L-0.7 0.7 t
|
|
pcylinder Rpad 0.5 0.1
|
|
ttranslate Rpad 0.9 L-0.9 t
|
|
eval compound $lpad Rpad rpads
|
|
|
|
# contact pads at the bottom
|
|
box pad -0.45 -0.27 -0.1 0.9 0.54 0.1
|
|
trotate pad 0 0 0 0 0 1 60
|
|
ellipse c 0 0 -0.1 0.5 0.4
|
|
mkedge e c
|
|
wire w e
|
|
mkplane f w
|
|
prism b f 0 0 0.1
|
|
bcommon bpad pad b
|
|
explode bpad so
|
|
renamevar bpad_1 bpad
|
|
#donly bpad; boundings bpad
|
|
|
|
# pattern of presence of bottom pads, on XY plane (top view)
|
|
set pattern [join {
|
|
..ooooooooooooooo...ooooooooooooooooo...
|
|
.oooooooooooooooo...ooooooooooooooooooo.
|
|
.oooooooooooooooooooooooooooooooooooooo.
|
|
.oooooooooooooooooooooooooooooooooooooo.
|
|
.oooooooooooooooooooooooooooooooooooooo.
|
|
.oooooooooooooooooooooooooooooooooooooo.
|
|
.oooooooooooooooooooooooooooooooooooooo.
|
|
.oooooooooooooooooooooooooooooooooooooo.
|
|
.ooooooooooo................ooooooooooo.
|
|
.oooooooooo.................ooooooooooo.
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
..oooooooooo................oooooooooo..
|
|
..oooooooooo................oooooooooo..
|
|
..oooooooooo................oooooooooo..
|
|
..oooooooooo................oooooooooo..
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
oooooooooooo................oooooooooooo
|
|
.ooooooooooo.................ooooooooooo
|
|
.ooooooooooo................oooooooooooo
|
|
.ooooooooooooooooooooooooooooooooooooooo
|
|
oooooooooooooooooooooooooooooooooooooooo
|
|
oooooooooooooooooooooooooooooooooooooooo
|
|
oooooooooooooooooooooooooooooooooooooooo
|
|
oooooooooooooooooooooooooooooooooooooooo
|
|
.ooooooooooooooooooooooooooooooooooooooo
|
|
..oooooooooooooooo...oooooooooooooooooo.
|
|
...ooooooooooooooo...ooooooooooooooooo..
|
|
} ""]
|
|
|
|
set nbpads 0
|
|
for {set i 0} {$i < 1600} {incr i} {
|
|
if { [string index $pattern $i] == "o" } { incr nbpads }
|
|
}
|
|
eval compound [lrepeat $nbpads bpad] cpad
|
|
set lpad [explode cpad]
|
|
for {set ipad 1; set iplace 0} {$ipad <= $nbpads && $iplace < 1600} {incr ipad; incr iplace} {
|
|
while { [string index $pattern $iplace] == "." } { incr iplace }
|
|
set icol [expr $iplace % 40]
|
|
set irow [expr $iplace / 40]
|
|
ttranslate cpad_$ipad [expr 1 + 0.91 * $icol] [expr [dval L] - 1 - 0.91 * $irow] 0
|
|
}
|
|
|
|
# round and square contact pads on top side
|
|
# note re-use of rpad object used for bootom round pads
|
|
eval compound [lrepeat 8 rpad] crpads
|
|
set lrpad [explode crpads]
|
|
ttranslate crpads_1 25.3 8.4 -0.1
|
|
ttranslate crpads_2 12.2 29.2 -0.1
|
|
ttranslate crpads_3 12.5 15. -0.1
|
|
ttranslate crpads_4 12.5 18.75 -0.1
|
|
ttranslate crpads_5 12.5 19.5 -0.1
|
|
ttranslate crpads_6 12.5 20.25 -0.1
|
|
ttranslate crpads_7 12.5 21. -0.1
|
|
ttranslate crpads_8 12.5 22.5 -0.1
|
|
box spad_1 12.21 13.75 -0.1 0.58 0.58 0.1
|
|
box spad_2 12.21 23.2 -0.1 0.58 0.58 0.1
|
|
|
|
# final compound for all bottom pads
|
|
eval compound $lpad $lrpad spad_1 spad_2 bpads
|
|
|
|
# resistor-like packages at the bottom
|
|
box rpk1 -0.6 -0.25 -0.5 0.3 0.5 0.5
|
|
box rpk2 -0.3 -0.25 -0.5 0.6 0.5 0.5
|
|
box rpk3 0.3 -0.25 -0.5 0.3 0.5 0.5
|
|
compound rpk1 rpk2 rpk3 rpk
|
|
|
|
eval compound [lrepeat 47 rpk] crpk
|
|
set lrpk [explode crpk]
|
|
# rotate first 26 packages vertically
|
|
for {set i 1} {$i <= 26} {incr i} {trotate crpk_$i 0 0 0 0 0 1 90}
|
|
# first 9 are vertical column on the right side of the bottom view
|
|
for {set i 1} {$i <= 9} {incr i} {
|
|
ttranslate crpk_$i 13.4 [expr 9.8 + 1.6 * $i] 0
|
|
}
|
|
# next 8 are 2x4 grid in top left corner
|
|
for {set i 1} {$i <= 4} {incr i} {
|
|
ttranslate crpk_[expr 9 + $i] 23. [expr 21.5 + 1.6 * $i] 0
|
|
ttranslate crpk_[expr 13 + $i] 24. [expr 21.5 + 1.6 * $i] 0
|
|
}
|
|
# others are translated individually, vertical first, bottom to top
|
|
ttranslate crpk_18 21.5 9.4 0
|
|
ttranslate crpk_19 21.5 11.0 0
|
|
ttranslate crpk_20 21.5 12.6 0
|
|
ttranslate crpk_21 22.5 9.8 0
|
|
ttranslate crpk_22 20.0 12.2 0
|
|
ttranslate crpk_23 24.0 13.6 0
|
|
ttranslate crpk_24 24.0 15.2 0
|
|
ttranslate crpk_25 19.5 16.0 0
|
|
ttranslate crpk_26 20.5 16.0 0
|
|
# now horizontal, bottom to top
|
|
ttranslate crpk_27 23.7 9.5 0
|
|
ttranslate crpk_28 23.7 10.5 0
|
|
ttranslate crpk_29 22.8 11.5 0
|
|
ttranslate crpk_30 22.8 12.5 0
|
|
ttranslate crpk_31 22.7 14.3 0
|
|
ttranslate crpk_32 22.7 16.0 0
|
|
ttranslate crpk_33 22.8 17.0 0
|
|
ttranslate crpk_34 22.8 19.1 0
|
|
ttranslate crpk_35 22.7 20.0 0
|
|
ttranslate crpk_36 23.0 20.9 0
|
|
ttranslate crpk_37 23.3 21.8 0
|
|
|
|
ttranslate crpk_38 19.8 21.6 0
|
|
ttranslate crpk_39 19.8 22.6 0
|
|
ttranslate crpk_40 19.8 23.6 0
|
|
ttranslate crpk_41 21.6 22.2 0
|
|
ttranslate crpk_42 21.6 23.2 0
|
|
ttranslate crpk_43 21.6 24.2 0
|
|
|
|
ttranslate crpk_44 18.0 24.6 0
|
|
ttranslate crpk_45 18.0 25.6 0
|
|
ttranslate crpk_46 18.0 26.6 0
|
|
ttranslate crpk_47 18.0 27.6 0
|
|
|
|
eval compound $lrpk brpk
|
|
|
|
# show result in plain 3d viewer
|
|
if [info exists i7_show_3dview] {
|
|
vinit Driver1/Viewer1/View1
|
|
vclear
|
|
vsetdispmode 1
|
|
|
|
vlight clear
|
|
vlight add amb
|
|
vlight add directional direction 1 -1 -2 head 1
|
|
|
|
vdisplay case
|
|
vsetcolor case 0.7 0.7 0.7
|
|
|
|
vdisplay title
|
|
vsetcolor title 0.1 0.1 0.1
|
|
|
|
# board is mostly yellow (edges, triangle markers)
|
|
foreach f [explode board f] { vdisplay $f; vsetcolor $f 0.7 0.5 0.3 }
|
|
# top and bottom faces are light-green (outside) and dark-green (inside)
|
|
vsetcolor board_4 0 0.6 0.55
|
|
vsetcolor board_5 0 0.6 0.55
|
|
vsetcolor board_12 0 0.3 0.33
|
|
vsetcolor board_15 0 0.3 0.33
|
|
|
|
vdisplay rpads
|
|
vsetcolor rpads 0.7 0.6 0.4
|
|
|
|
vdisplay bpads
|
|
vsetcolor bpads 0.7 0.6 0.4
|
|
|
|
vdisplay brpk
|
|
vsetcolor brpk 0.5 0.4 0.3
|
|
|
|
donly board case rpads brpk; fit
|
|
}
|
|
|
|
# make XDE document
|
|
catch {Close D}
|
|
pload OCAF XDE
|
|
|
|
NewDocument D MDTV-XCAF
|
|
|
|
SetName D [XAddShape D board 0] "Board"
|
|
foreach f [explode board f] { XSetColor D $f 0.7 0.5 0.3 }
|
|
XSetColor D board_4 0 0.6 0.55
|
|
XSetColor D board_5 0 0.6 0.55
|
|
XSetColor D board_12 0 0.3 0.33
|
|
XSetColor D board_15 0 0.3 0.33
|
|
|
|
SetName D [XAddShape D case 0] "Case"
|
|
XSetColor D case 0.7 0.7 0.7
|
|
|
|
SetName D [XAddShape D title 0] "Case title"
|
|
XSetColor D title 0.1 0.1 0.1
|
|
|
|
SetName D [XAddShape D rpads 1] "Top side contact pads"
|
|
SetName D [XAddShape D bpads 1] "Bottom contact pads"
|
|
SetName D [XFindShape D bpad] "Contact pad"
|
|
SetName D [XFindShape D rpad] "Round pad"
|
|
SetName D [XFindShape D Rpad] "Big round pad"
|
|
SetName D [XFindShape D spad_1] "Square pad 1"
|
|
SetName D [XFindShape D spad_2] "Square pad 2"
|
|
XSetColor D rpad 0.7 0.6 0.4
|
|
XSetColor D Rpad 0.7 0.6 0.4
|
|
XSetColor D bpad 0.7 0.6 0.4
|
|
XSetColor D spad_1 0.7 0.6 0.4
|
|
XSetColor D spad_2 0.7 0.6 0.4
|
|
|
|
SetName D [XAddShape D brpk 1] "Bottom packages"
|
|
SetName D [XFindShape D rpk] "Bottom package"
|
|
XSetColor D rpk1 0.7 0.7 0.7
|
|
XSetColor D rpk2 0.5 0.4 0.3
|
|
XSetColor D rpk3 0.7 0.7 0.7
|
|
|
|
XShow D
|
|
vlight clear
|
|
vlight add amb
|
|
vlight add directional direction 1 -1 -2 head 1
|
|
vsetdispmode 1
|
|
vfit
|
|
|
|
# save to STEP if variable i7_save_xde is defined (specifies file name)
|
|
if [info exists i7_save_xde] {
|
|
param write.surfacecurve.mode 0
|
|
WriteStep D $i7_save_xde
|
|
} |