Find more posts tagged with
Interesting! But if you could share us how to do that, it's even more interesting
/emoticons/default_smile.png' alt=':)' srcset='<fileStore.core_Emoticons>/emoticons/smile@2x.png 2x' width='20' height='20'>
Hiii Mr.Quy
to measure (diameter, surf-surf distance, ...) => click on corresponding toolbar buttons
pick a circle => it shows diameter and radius
pick 2 surfs => it shows distance
pick a surf then a line => it shows distance,
...
i add options to measure distance at closest position or picking position (ex. if in case 2 surfs or surf-line are not parallel)
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
/emoticons/default_biggrin.png' alt=':D' srcset='/emoticons/biggrin@2x.png 2x' width='20' height='20'> it's a secret!
i'll give a brief explain (actually difficult to explain fully in english, i am sorry)
- diameter measure: i used only command hm_getbestcircle, it return diameter value directly just in one click
- surf-surf measure: when click on surf, it creates a node at clicking position, the node then projected to alternative surf, projecting direction is not normal to the surf but make equally angle with each surf (so in case 2 surfs not parallel then => get correct distance)
- surf-line measure: similar to surf-surf, but temp node will be created on line, it then projected normally to surf (to find normal distance) and hm_getdistancefromnearest on surf to get true distance
- line-line measure: similar to surf-surf, but after temp node created on a line, a closest position from it on the alternative line will be get (hm_getdistancefromnearest)
- segment-segment (used when measuring height of a bead): i do some vector operations to find common perpendicular line of the two segment, length of it is distance between 2 segments, with option 'extended closest postion' then this value is reported, in case of 'closest position' it is compared to relative position between 2 segments ( as edge-to-edge contact calculation)
Hii Mr.Quy
below is code to make my toolbar
actually create toolbar can be done as in 'hmsettings.tcl' file. but i modify something to fix errors when starting hm or first invoking to the functions
/emoticons/default_cool.png' alt='B)'>
proc ::nvtb:_DestroyToolBar {ToolBarName} {
if {[winfo exists ._ViviToolBar-$ToolBarName]} {
destroy ._ViviToolBar-$ToolBarName
}
foreach window [winfo children .] {
if {[string match *.minibartoplevel* $window]} {
foreach window2 [winfo children $window] {
if {[string match *ViviToolBar-$ToolBarName* $window2]} {
destroy $window
break
}
}
}
}
}
proc ::nvtb:_CreateMeasurementToolBar {} {
::HM_Framework:_CreateMinibar . ViviToolBar-Measurement HyperMesh:HyperMesh:_blank
::HM_Framework:_SetMinibarIconList ViviToolBar-Measurement [list \
[list [list p_CreateMinibarIcon [file join $::nvtb::v_ImageDir MeasureCircleDiameter-24.png ] 'if {!\[namespace exists ::nvtb\]} {source \'$::nvtb::v_InfoScript\'; ::nvtb:_MeasureCircleDiameter } else {::nvtb:_MeasureCircleDiameter }' {Circle Diameter} 1] ] \
[list [list p_CreateMinibarIcon [file join $::nvtb::v_ImageDir MeasureDistanceSurfSurf-24.png ] 'if {!\[namespace exists ::nvtb\]} {source \'$::nvtb::v_InfoScript\'; ::nvtb:_MeasureDistanceSurfSurf } else {::nvtb:_MeasureDistanceSurfSurf }' {Surf-Surf Distance} 1] ] \
[list [list p_CreateMinibarIcon [file join $::nvtb::v_ImageDir MeasureDistanceSurfLine-24.png ] 'if {!\[namespace exists ::nvtb\]} {source \'$::nvtb::v_InfoScript\'; ::nvtb:_MeasureDistanceSurfLine } else {::nvtb:_MeasureDistanceSurfLine }' {Surf-Line Distance} 1] ] \
[list [list p_CreateMinibarIcon [file join $::nvtb::v_ImageDir MeasureDistanceLineLine-24.png ] 'if {!\[namespace exists ::nvtb\]} {source \'$::nvtb::v_InfoScript\'; ::nvtb:_MeasureDistanceLineLine } else {::nvtb:_MeasureDistanceLineLine }' {Line-Line Distance} 1] ] \
[list [list p_CreateMinibarIcon [file join $::nvtb::v_ImageDir MeasureDistanceSegmSegm-24.png ] 'if {!\[namespace exists ::nvtb\]} {source \'$::nvtb::v_InfoScript\'; ::nvtb:_MeasureDistanceSegmSegm } else {::nvtb:_MeasureDistanceSegmSegm }' {Segment-Segment Distance} 1] ] \
[list [list p_CreateMinibarIcon options-24.png 'if {!\[namespace exists ::nvtb\]} {source \'$::nvtb::v_InfoScript\'; ::nvtb:_Options } else {::nvtb:_Options }' {Options} 1 ] ] \
]
::HM_Framework:_AddMinibarToDockframe ViviToolBar-Measurement .mainFrame.dockframe_top
set ::HM_Framework::Minibar::ViviToolBar-Measurement:_status 1
}
proc ::nvtb:_CreatePullDownMenuForToolBar {ToolBarName} {
#set menu [. cget -menu].view.toolbars
set menu [hm_framework getpulldowns].view.toolbars
if {[catch {$menu index ViviToolBar-${ToolBarName}}]} {
$menu add checkbutton \
-indicatoron 1 \
-offvalue 0 \
-onvalue 1 \
-variable ::HM_Framework::Minibar::ViviToolBar-${ToolBarName}:_status \
-command '::HM_Framework:_ToggleMinibar ViviToolBar-${ToolBarName}' \
-label ViviToolBar-${ToolBarName} \
-underline 0
return 0
} else {
return 1
}
}
Thanks for sharing.. Is this the complete code??
Hi, below is complete code, after some persons used, i fix some bugs
now already 4 persons use it /emoticons/default_biggrin.png' alt=':D' srcset='/emoticons/biggrin@2x.png 2x' width='20' height='20'>
If you like, please send me your MCID, i just want to record number of users
#created
#varthamanan
proc CreateToolBar { carName jataList } {
#Create Toolbar
::HM_Framework:/emoticons/default_tongue.png' alt=':P' srcset='/emoticons/tongue@2x.png 2x' width='20' height='20'>_CreateMinibar . $carName;
#Add Icon
foreach Data $jataList {
set iconfile [ lindex $Data 2 ]
set cmd [ lindex $Data 1 ]
set name [ lindex $Data 0 ]
::HM_Framework:/emoticons/default_tongue.png' alt=':P' srcset='/emoticons/tongue@2x.png 2x' width='20' height='20'>_AddIconToMinibar $carName \
[ list p_CreateMinibarIcon [ file tail $iconfile ] $cmd $name 1 ];
}
#Pack Toolbar
::HM_Framework:/emoticons/default_tongue.png' alt=':P' srcset='/emoticons/tongue@2x.png 2x' width='20' height='20'>_AddMinibarToDockframe $carName .dockframe_center;
#Destroy
}
proc RedrawWindows { } {
set pos [ hm_getcommandposition ]
if { $pos == 'top' } {
hm_setcommandposition bottom
hm_setcommandposition top
} else {
hm_setcommandposition top
hm_setcommandposition bottom
}
}
set jataList ''
# quick edit panel
set EditIcon 'nodesInterpolateOnSurf-24.gif'
set jataList '$jataList { {Quick Edit} { ::face {args} } $EditIcon }'
# automesh panel
set MeshIcon 'meshLines-32.gif'
set jataList '$jataList { {AutoMesh} { hm_pushpanel \'automesh\' } $MeshIcon }'
# check panel
set CheckIcon 'check.gif'
set jataList '$jataList { {Element Checks} { hm_pushpanel \'check elems\' } $CheckIcon }'
#
# vis button
set MeshIcon 'distanceBetweenNodes-24.gif'
set jataList '$jataList { {Distance} { hm_pushpanel \'distance\' } $MeshIcon }'
#
# vis button
set MeshIcon 'edgesGeneral-24.gif'
set jataList '$jataList { {Edges} { hm_pushpanel \'edges\' } $MeshIcon }'
# vis button
set MeshIcon 'elem-normal.gif'
set jataList '$jataList { {Normals} { hm_pushpanel \'normals\' } $MeshIcon }'
# vis button
set MeshIcon 'intersectionGUI.gif'
set jataList '$jataList { {intersection} { hm_pushpanel \'penetration\' } $MeshIcon }'
# vis button
set MeshIcon 'numbers-24.gif'
set jataList '$jataList { {Numbers} { hm_pushpanel \'numbers\' } $MeshIcon }'
# vis button
set MeshIcon 'pan.gif'
set jataList '$jataList { {Translate} { hm_pushpanel \'translate\' } $MeshIcon }'
# vis button
set MeshIcon 'pointsExtractParametric-24.gif'
set jataList '$jataList { {Project} { hm_pushpanel \'project\' } $MeshIcon }'
# vis button
set MeshIcon 'blankNesting-24.gif'
set jataList '$jataList { {Reflect} { hm_pushpanel \'reflect\' } $MeshIcon }'
# vis button
set MeshIcon 'gap-24.gif'
set jataList '$jataList { {Replace} { hm_pushpanel \'replace\' } $MeshIcon }'
# vis button
set MeshIcon 'erase-16.gif'
set jataList '$jataList { {Edit elements} { hm_pushpanel \'edit element\' } $MeshIcon }'
# vis button
set MeshIcon 'objectives.gif'
set jataList '$jataList { {Replace} { hm_pushpanel \'split\' } $MeshIcon }'
#
# vis button
set MeshIcon 'linesExtractEdge-24.gif'
set jataList '$jataList { {Smooth} { hm_pushpanel \'smooth\' } $MeshIcon }'
#
# vis button
set MeshIcon 'linesOffsetConstant-24.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'node edit\' } $MeshIcon }'
#
# vis button
set MeshIcon 'post-shaded-16.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'ruled\' } $MeshIcon }'
#
# vis button
set MeshIcon '3dElements-24.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'drag\' } $MeshIcon }'
#
# vis button
set MeshIcon 'solidDragLine-24.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'solid map\' } $MeshIcon }'
#
# vis button
set MeshIcon 'morphingVolume-16.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'HyperMorph\' } $MeshIcon }'
proc ::face {args} {
*appendmark elements 1 'by adjacent'
hm_saveusermark elems 1;
*appendmark elements 1 'retrieve'
hm_highlightmark elems 1 h;
}
# create toolbar
catch { ::HM_Framework:/emoticons/default_tongue.png' alt=':P' srcset='/emoticons/tongue@2x.png 2x' width='20' height='20'>_DeleteMinibar CustomToolBar }
CreateToolBar fanels $jataList
# redraw window
RedrawWindows
#created
#varthamanan
proc CreateToolBar { carName jataList } {
#Create Toolbar
::HM_Framework:/emoticons/default_tongue.png' alt=':P' srcset='/emoticons/tongue@2x.png 2x' width='20' height='20'>_CreateMinibar . $carName;
#Add Icon
foreach Data $jataList {
set iconfile [ lindex $Data 2 ]
set cmd [ lindex $Data 1 ]
set name [ lindex $Data 0 ]
::HM_Framework:/emoticons/default_tongue.png' alt=':P' srcset='/emoticons/tongue@2x.png 2x' width='20' height='20'>_AddIconToMinibar $carName \
[ list p_CreateMinibarIcon [ file tail $iconfile ] $cmd $name 1 ];
}
#Pack Toolbar
::HM_Framework:/emoticons/default_tongue.png' alt=':P' srcset='/emoticons/tongue@2x.png 2x' width='20' height='20'>_AddMinibarToDockframe $carName .dockframe_center;
#Destroy
}
proc RedrawWindows { } {
set pos [ hm_getcommandposition ]
if { $pos == 'top' } {
hm_setcommandposition bottom
hm_setcommandposition top
} else {
hm_setcommandposition top
hm_setcommandposition bottom
}
}
set jataList ''
# quick edit panel
set EditIcon 'nodesInterpolateOnSurf-24.gif'
set jataList '$jataList { {Quick Edit} { ::face {args} } $EditIcon }'
# automesh panel
set MeshIcon 'meshLines-32.gif'
set jataList '$jataList { {AutoMesh} { hm_pushpanel \'automesh\' } $MeshIcon }'
# check panel
set CheckIcon 'check.gif'
set jataList '$jataList { {Element Checks} { hm_pushpanel \'check elems\' } $CheckIcon }'
#
# vis button
set MeshIcon 'distanceBetweenNodes-24.gif'
set jataList '$jataList { {Distance} { hm_pushpanel \'distance\' } $MeshIcon }'
#
# vis button
set MeshIcon 'edgesGeneral-24.gif'
set jataList '$jataList { {Edges} { hm_pushpanel \'edges\' } $MeshIcon }'
# vis button
set MeshIcon 'elem-normal.gif'
set jataList '$jataList { {Normals} { hm_pushpanel \'normals\' } $MeshIcon }'
# vis button
set MeshIcon 'intersectionGUI.gif'
set jataList '$jataList { {intersection} { hm_pushpanel \'penetration\' } $MeshIcon }'
# vis button
set MeshIcon 'numbers-24.gif'
set jataList '$jataList { {Numbers} { hm_pushpanel \'numbers\' } $MeshIcon }'
# vis button
set MeshIcon 'pan.gif'
set jataList '$jataList { {Translate} { hm_pushpanel \'translate\' } $MeshIcon }'
# vis button
set MeshIcon 'pointsExtractParametric-24.gif'
set jataList '$jataList { {Project} { hm_pushpanel \'project\' } $MeshIcon }'
# vis button
set MeshIcon 'blankNesting-24.gif'
set jataList '$jataList { {Reflect} { hm_pushpanel \'reflect\' } $MeshIcon }'
# vis button
set MeshIcon 'gap-24.gif'
set jataList '$jataList { {Replace} { hm_pushpanel \'replace\' } $MeshIcon }'
# vis button
set MeshIcon 'erase-16.gif'
set jataList '$jataList { {Edit elements} { hm_pushpanel \'edit element\' } $MeshIcon }'
# vis button
set MeshIcon 'objectives.gif'
set jataList '$jataList { {Replace} { hm_pushpanel \'split\' } $MeshIcon }'
#
# vis button
set MeshIcon 'linesExtractEdge-24.gif'
set jataList '$jataList { {Smooth} { hm_pushpanel \'smooth\' } $MeshIcon }'
#
# vis button
set MeshIcon 'linesOffsetConstant-24.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'node edit\' } $MeshIcon }'
#
# vis button
set MeshIcon 'post-shaded-16.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'ruled\' } $MeshIcon }'
#
# vis button
set MeshIcon '3dElements-24.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'drag\' } $MeshIcon }'
#
# vis button
set MeshIcon 'solidDragLine-24.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'solid map\' } $MeshIcon }'
#
# vis button
set MeshIcon 'morphingVolume-16.gif'
set jataList '$jataList { {node edit} { hm_pushpanel \'HyperMorph\' } $MeshIcon }'
proc ::face {args} {
*appendmark elements 1 'by adjacent'
hm_saveusermark elems 1;
*appendmark elements 1 'retrieve'
hm_highlightmark elems 1 h;
}
# create toolbar
catch { ::HM_Framework:/emoticons/default_tongue.png' alt=':P' srcset='/emoticons/tongue@2x.png 2x' width='20' height='20'>_DeleteMinibar CustomToolBar }
CreateToolBar fanels $jataList
# redraw window
RedrawWindows
Hello Tinh,
I am really happy for your response.
Hm 2019 toolbars may be better but we still using old version like hm 14 and hm 17 as stable versions.
Kindly share with us it will be more and more useful. Rather than keeping them calm, we wanted to use it fully and efficiently.
Hope you help us with your scripts.
here my mail id to drop it ravinderdme@gmail.com
Thank you in advance!
Congratulations,it really looks so interesting
/emoticons/default_smile.png' alt=':)' srcset='/emoticons/smile@2x.png 2x' width='20' height='20'>