⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapter14happyyou3dscontrol.pro

📁 idl 可视化分析与应用(随书程序)
💻 PRO
📖 第 1 页 / 共 3 页
字号:
  state.model_cycle_pos = 0
  state.selected = oModel
  g = oModel->get(pos=0)
  if (obj_isa(g,'IDLgrText')) then begin
     rect = state.win->gettextdimensions(g)
  end
  state.oModelMan->SetTarget, state.selected
  state.selected->GetProperty, uvalue=s
  str = "Current selection : " + s
  widget_control, state.text, set_value=str
  widget_control, state.wModelDeleteButton, sensitive=1
  widget_control, state.wAddChildButton, sensitive=1
  widget_control, state.wUnselectButton, sensitive=1
  widget_control, state.wModelModeRadio, sensitive=1
  widget_control, state.wSaveButton, sensitive=([1,0])[lmgr(/demo)]
  widget_control, state.wModelSelectButton, sensitive= $
    n_elements(*(state.model_lists[view_uval.num])) gt 2
  state.win->Draw, state.scene
end
;----------------------------------------------------------------------------
Function Chapter14HappyYou3DSControlToggleState, wid
  widget_control, wid, get_value=name
  s = strpos(name,'(off)')
  if (s NE -1) then begin
    strput,name,'(on )',s
    ret = 1
  end else begin
    s = strpos(name,'(on )')
    strput,name,'(off)',s
    ret = 0
  end
  widget_control, wid, set_value=name
  return,ret
end
;----------------------------------------------------------------------------
pro Chapter14HappyYou3DSControlCleanup, wTopBase
  widget_control, wtopbase, get_uvalue=state, /no_copy
  for i=0,n_tags(state)-1 do begin
    case size(state.(i), /TNAME) of
      'POINTER': ptr_free, state.(i)
      'OBJREF':obj_destroy, state.(i)
      else:
    endcase
  end
end
;----------------------------------------------------------------------------
pro Chapter14HappyYou3DSControlEvent, ev
  if tag_names(ev, /structure_name) eq 'WIDGET_KILL_REQUEST' then begin
     widget_control,ev.top,/destroy
     return
  end
  ;If mouse buttons are down, only process draw widget events.
  widget_control, ev.top, get_uvalue=state, /no_copy
  widget_control, ev.id, get_uval=uval
  if state.btndown eq 1 then begin
    if uval[0] eq 'DRAW' then begin
      if ev.type eq 0 then begin ; Button down event
        widget_control, ev.top, set_uvalue=state, /no_copy
        return      ;ignore it.A mouse button is already down.
      end
    end else begin
      widget_control, ev.top, set_uvalue=state, /no_copy
      return
    end
  end
  widget_control, ev.top, set_uvalue=state, /no_copy
  ;Normal event handling.
  case uval[0] of
  'QUIT' : begin
      widget_control, ev.top, /destroy
      return
   end
  'HELP' : begin
      Chapter14HappyYou3DSHelp, 'Chapter14HappyYou3DSHelp.txt', TITLE='3DS Help System'
  end
  'ABOUT' : begin
      result=dialog_message(['3DS System v 6.0   ','','Programming : HappyYou','', $
                  '程序设计 : Happy You ',' ', '      2005.5.30'],/information)
  end
  'VRML' : begin
      widget_control, ev.top, get_uvalue=state, /no_copy
      if (state.oCurrentView NE obj_new()) then begin
        file=dialog_pickfile(/write,file='untitled.wrl',group=ev.top,filter='*.wrl')
        if (file NE '') then begin
          widget_control, /hourglass
          state.win->GetProperty, dimension=wdims, resolution=res,color_model=cm, $
                                  n_colors=icolors
          oVRML = obj_new('IDLgrVRML', dimensions=wdims, resolution=res, $
                 color_model=cm, n_colors=icolors )
          oVRML->setproperty, filename=file
          oVRML->Draw, state.oCurrentView
          obj_destroy,oVRML
        end
      end
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'PRINT' : begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    oPrinter = obj_new('IDLgrPrinter')
    if (dialog_printersetup(oPrinter)) then begin
      if (dialog_printjob(oPrinter)) then begin
        oPrinter->GetProperty,resolution=res
        DPI = 2.54/float(res)
        state.win->GetProperty,resolution=res
        DPI = 2.54/float(res)
        state.win->GetProperty, dimension=wdims
        oViews = state.scene->get(/all)
        for i=0,n_elements(oViews)-1 do begin
          oViews[i]->IDLgrView::getproperty, loc=loc,dim=vdim
          loc = loc/DPI
          vdim = vdim/DPI
          oViews[i]->IDLgrView::setproperty, loc=loc, dim=vdim, units=1
        end
        oPrinter->Draw, state.scene
        oPrinter->newdocument
        for i=0,N_ELEMENTS(oViews)-1 do begin
          oViews[i]->IDLgrView::getproperty, loc=loc,dim=vdim
          loc = loc*DPI
          vdim = vdim*DPI
          oViews[i]->IDLgrView::setproperty, loc=loc,dim=vdim,units=0
        end
      end
    end
    obj_destroy,oPrinter
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'LOAD' : begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    if state.selected ne obj_new() then begin
      file = dialog_pickfile( /read, /must_exist, group=ev.top, filter='*.sav' )
      if (file NE '') then begin
        restore, file, /relaxed_structure_assignment
        Chapter14HappyYou3DSControlAdd, state, tmp_obj
      end
    end
  widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'SAVE' : begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    if state.selected NE obj_new() and $
       state.selected NE state.oCurrentTopModel then begin
      file = dialog_pickfile(/write,file='untitled.sav',group=ev.top, filter='*.sav')
      if (file NE '') then begin
        ; Isolate tmp_obj from the tree.
        state.selected->GetProperty, parent=parent
        parent->remove, state.selected
        state.oModelMan->SetTarget, obj_new()
        tmp_obj = state.selected
        save, tmp_obj, filename=file
        ; Repair the tree.
        parent->add, state.selected
        state.oModelMan->SetTarget, state.selected
      end
    end
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'MODELSELECT': begin ; Select next object.
    widget_control, ev.top, get_uvalue=state, /no_copy
    wDraw = state.wDraw
    widget_control, ev.top, set_uvalue=state, /no_copy
    Chapter14HappyYou3DSControlEvent, $
        {id:wDraw,top:ev.top,handler:0L,type:0,press:4,x:-2,y:-2}
  end
  'UNSELECT': begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    state.selected = state.oCurrentTopModel
    widget_control, state.wModelDeleteButton, sensitive=0
    widget_control, state.wAddChildButton, sensitive=0
    widget_control, state.wUnselectButton, sensitive=0
    widget_control, state.wModelModeRadio, sensitive=0
    widget_control, state.wModelSelectButton, sensitive=1
    widget_control, state.wSaveButton, sensitive=0
    widget_control, state.text, set_value="No current selection  "
    state.oModelMan->SetTarget, obj_new()
    state.win->Draw, state.scene
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'MODELMODE': begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    Chapter14HappyYou3DSControlNewMode, state, ev.value
    state.win->Draw, state.scene
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'ADD': begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    if state.oBasePlatePolygon ne obj_new() then begin
      Chapter14HappyYou3DSControlAdd, state, Chapter14HappyYou3DSControlMakeObj( $
        (where(state.addable_subjects eq uval[1]))[0], state.theFont )
    end
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'ADDCHILD': begin
    widget_control, /hourglass
    widget_control, ev.top, get_uvalue=state, /no_copy
    if state.oBasePlatePolygon ne obj_new() then begin
      Chapter14HappyYou3DSControlAdd, state, Chapter14HappyYou3DSControlMakeObj( $
      (where(state.addable_subjects eq uval[1]))[0], state.theFont ), /as_child
    end
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'DEL': begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    if ((state.selected ne obj_new()) AND $
        (state.selected ne state.oCurrentTopModel)) then begin
        state.oModelMan->SetTarget, obj_new()
        state.selected->GetProperty, parent=p
        p->remove, state.selected
        obj_destroy, state.selected
        state.oCurrentView->GetProperty, uvalue=view_uval
        indx = where( obj_valid(*(state.model_lists[view_uval.num])), count )
        if indx[0] eq -1 then begin
          *(state.model_lists[view_uval.num]) = obj_new()
          state.selected = state.oCurrentTopModel
          str = "No current selection  "
          widget_control, state.text, set_value=str
          widget_control, state.wModelDeleteButton, sensitive=0
          widget_control, state.wAddChildButton, sensitive=0
          widget_control, state.wUnselectButton, sensitive=0
          widget_control, state.wModelSelectButton, sensitive=0
          widget_control, state.wSaveButton, sensitive=0
          widget_control, state.wModelModeRadio, sensitive=0
          state.win->Draw, state.scene
        end else begin
          *(state.model_lists[view_uval.num]) = $
            [(*(state.model_lists[view_uval.num]))[indx], obj_new() ]
          ; Select something.
          wDraw = state.wDraw
          widget_control, ev.top, set_uvalue=state, /no_copy
          Chapter14HappyYou3DSControlEvent, $
               {id: wDraw, top: ev.top, handler:0L, type:0, press:4, x:-1, y:-1 }
          return
        end
    end
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'DRAGQLOW' : begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    state.dragq = 0
    widget_control, state.wDragQLow,sensitive=0
    widget_control, state.wDragQMedium, sensitive=1
    widget_control, state.wDragQHigh, sensitive=1
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'DRAGQMEDIUM' : begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    state.dragq = 1
    widget_control, state.wDragQLow,sensitive=1
    widget_control, state.wDragQMedium, sensitive=0
    widget_control, state.wDragQHigh, sensitive=1
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'DRAGQHIGH' : begin
    widget_control, ev.top, get_uvalue=state, /no_copy
    state.dragq = 2
    widget_control, state.wDragQLow,sensitive=1
    widget_control, state.wDragQMedium, sensitive=1
    widget_control, state.wDragQHigh, sensitive=0
    widget_control, ev.top, set_uvalue=state, /no_copy
  end
  'GRID' : begin
    widget_control, /hourglass
    widget_control, ev.top, get_uvalue=state, /no_copy

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -