明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1247|回复: 2

各位高手帮帮忙啊

[复制链接]
发表于 2005-10-9 16:01 | 显示全部楼层 |阅读模式

请教下,下面这段代码都做了些什么. 先谢谢了!!!!!
(setq or_func:dlg_use_index 0)

 ;if click ok exit dialog this will be set true and really exit dialog   
(setq or_func:dlg_use_exit_flag nil)                                     
(setq or_func:dlg_use_max_items_per_page 10)                              
(setq or_func:dlg_use_refined_data nil)                                   
(setq or_func:dlg_use_display_data_len 0)                                 
 ;not display these algorithm parameter                                 
(setq or_func:param_list_need_not_display                              
       (list "MATCHED"      "IMAGE_INDEX"   "CHANGED"
      "X_SYM_OFF "    "X_SYM_OFF"     "Y_SYM_OFF "               
      "Y_SYM_OFF"     "SEQUENCE"      "FUNC_NAME"
      "TUNABLE"      "DIAG"      "ALG_TYP"
      "ALG_NAME"
     )
)

 ;----------------------------------------------
 ;main funciton open the dialog
 ;----------------------------------------------
(defun or_func:main (/ block rawdata blk_type finedata cmdecho)  
 ;set system var disable cmd echo              
  (setq cmdecho (getvar "cmdecho"))                               
  (setvar "cmdecho" 0)                                           

  (setq block (or_func:select_block))
  (if block
    (progn
      (setq rawdata (or_func:get_block_rawdata block))
      (setq blk_type (or_func:check_block_type rawdata))
      (setq finedata (or_func:format_rawdata rawdata))
 ;display on textscr                                             
      (or_func:display_on_textscr finedata blk_type)
 ;-----------------------------------------------------------------------
 ;set global var for dialog use
      (setq or_func:dlg_use_refined_data finedata)
      (while (not or_func:dlg_use_exit_flag)
 (or_func:display_on_dialog
   or_func:dlg_use_refined_data
   blk_type
 )
      )
      (setq or_func:dlg_use_refined_data nil)
      (setq or_func:dlg_use_index 0)
      (setq or_func:dlg_use_exit_flag nil)
      (setq or_func:dlg_use_display_data_len 0)
 ;-----------------------------------------------------------------------
    )
    (prompt "No block selected...\n")
  )

  (setvar "cmdecho" cmdecho)
  (princ)
)

 ;----------------------------------------------
 ;dialog output parameters with block type
 ;----------------------------------------------

(defun or_func:display_on_dialog (refined_data blk_type)
  (cond ((= blk_type "ALG")
  (or_func:display_dlg_alg_blk refined_data)
 )
 ((= blk_type "SIG")
 ;not display sig info with dialog see it on textscr
  (setq or_func:dlg_use_exit_flag t)
 )
 (t
 ;nothing happened
  (setq or_func:dlg_use_exit_flag t)
 )
  )
)

 ;----------------------------------------------
 ;dialog output alg-blk parameters (need refactoring)
 ;----------------------------------------------

(defun or_func:display_dlg_alg_blk
       (refined_data   /
        remove_list    rmv_lst_len
        index    display_data
        func_name    alg_name
        temp    dcl_content
        fname    fn
        display_data_len
        dcl_id    dlg_make_index
        dlg_make_count
       )
 ;-------------------------------------------------------
 ; 1 remove no use parameter frome refined_data make display_data
 ; 2 get useful data like func_name,alg_name from refined_data
 ; 3 dynamic create dialog resource dcl.dcl and component resource
 ; 4 load dialog and update control data
 ; 5 set dialog action action_tile
 ; 6 unload dialog delete resource dcl
 ;-------------------------------------------------------

 ;init

 ;remove no use parameter
  (setq remove_list or_func:param_list_need_not_display)
  (setq index 0)
  (setq rmv_lst_len (length remove_list))
  (setq display_data refined_data)
  (while (< index rmv_lst_len)
    (setq display_data
    (vl-remove (assoc (nth index remove_list) display_data)
        display_data
    )
    )
    (setq index (+ index 1))
  )

 ;get function name
  (setq func_name (cdr (assoc "FUNC_NAME" refined_data)))
  (setq alg_name (cdr (assoc "ALG_NAME" refined_data)))
  (setq display_data_len (length display_data))
  (setq or_func:dlg_use_display_data_len display_data_len)

 ;create dialog resource
 ;create dcl file and open
  (setq fname (vl-filename-mktemp "ocdapr.dcl"))
  (setq fn (open fname "w"))

 ;create header
  (setq dcl_content
  "ocdapr : dialog {
label = \"Ovation Controlbuilder Drawing Algorithm Parameter Reader\" ;
spacer;
alg_block_name;\n"
  )
  (write-line dcl_content fn)

 ;-------------------------------------------------------
 ;create attribute list
  (setq dcl_content ": boxed_column {//\n") ;boxed_column start
  (setq dcl_content (strcat dcl_content ": row {")) ;row start
 ;-------------------------------------------------------

 ;begin index column
  (setq dcl_content
  (strcat dcl_content ":column{\nindex_label;\n")
  ) ;label
  (setq dlg_make_index or_func:dlg_use_index)
  (setq dlg_make_count 0)
  (while (and (< dlg_make_count or_func:dlg_use_max_items_per_page)
       (< dlg_make_index display_data_len)
  )

    (setq dcl_content (strcat dcl_content ": index { label=\""))
    (setq dcl_content
    (strcat dcl_content
     (or_func:format_2digi dlg_make_index)
    )
    )
    (setq dcl_content (strcat dcl_content "\";}//\n"))

    (setq dlg_make_count (+ dlg_make_count 1))
    (setq dlg_make_index (+ dlg_make_index 1))
  )
  (setq dcl_content (strcat dcl_content "}//\n"))
 ;end index colunm

 ;begin parameter name colum
  (setq dcl_content
  (strcat dcl_content ":column{\nparameter_label;\n")
  ) ;label
  (setq dlg_make_index or_func:dlg_use_index)
  (setq dlg_make_count 0)
  (while (and (< dlg_make_count or_func:dlg_use_max_items_per_page)
       (< dlg_make_index display_data_len)
  )

    (setq dcl_content (strcat dcl_content ": para_name { label=\""))
    (setq dcl_content
    (strcat dcl_content
     (car (nth dlg_make_index display_data))
    )
    )
    (setq dcl_content (strcat dcl_content "\";}//\n"))

    (setq dlg_make_count (+ dlg_make_count 1))
    (setq dlg_make_index (+ dlg_make_index 1))
  )
  (setq dcl_content (strcat dcl_content "}//\n"))
 ;end parameter colunm


 ;begin value column
  (setq dcl_content
  (strcat dcl_content ":column{\nvalue_label;\n")
  ) ;label
  (setq dlg_make_index or_func:dlg_use_index)
  (setq dlg_make_count 0)
  (while (and (< dlg_make_count or_func:dlg_use_max_items_per_page)
       (< dlg_make_index display_data_len)
  )

    (setq dcl_content (strcat dcl_content ": para_value { value=\""))
    (setq dcl_content
    (strcat dcl_content
     (cdr (nth dlg_make_index display_data))
    )
    )
    (setq dcl_content (strcat dcl_content "\";}//\n"))

    (setq dlg_make_count (+ dlg_make_count 1))
    (setq dlg_make_index (+ dlg_make_index 1))
  )
  (setq dcl_content (strcat dcl_content "}//\n"))
 ;end value column

 ;begin description column
  (setq dcl_content
  (strcat dcl_content ":column{\ndescription_label;\n")
  ) ;label
  (setq dlg_make_index or_func:dlg_use_index)
  (setq dlg_make_count 0)
  (while (and (< dlg_make_count or_func:dlg_use_max_items_per_page)
       (< dlg_make_index display_data_len)
  )

    (setq dcl_content (strcat dcl_content ": description { label=\""))

    (setq dcl_content
    (strcat dcl_content
     (or_func:find_description
       func_name
       (car (nth dlg_make_index display_data))
     ) ;search description
    )
    ) ;
    (setq dcl_content (strcat dcl_content "\";}//\n")) ;

    (setq dlg_make_count (+ dlg_make_count 1))
    (setq dlg_make_index (+ dlg_make_index 1))
  )
  (setq dcl_content (strcat dcl_content "}//\n"))
 ;end description column

 ;-------------------------------------------------------
  (setq dcl_content (strcat dcl_content "}//end row\n")) ;end row
  (setq dcl_content (strcat dcl_content "spacer;\n")) ;add spacer
  (setq dcl_content (strcat dcl_content "}//end boxed_column\n"))
 ;end box
  (write-line dcl_content fn)
 ;create attribute list over
 ;-------------------------------------------------------


 ;create turnpage button and close button
  (if (> display_data_len or_func:dlg_use_max_items_per_page)
    (progn
      (setq dcl_content "turnpagebutton;//\n")
      (write-line dcl_content fn)
    )
  )
  (setq dcl_content "cancelbutton;\n}//")
  (write-line dcl_content fn)

 ;create dcl tail contents
  (setq dcl_content (or_func:get_dcl_resource_components))
  (write-line dcl_content fn)

 ;create over, close temp dcl file
  (close fn)

 ;load dialog
  (setq dcl_id (load_dialog fname))
  (if (not (new_dialog "ocdapr" dcl_id))
    (exit)
  ) ;if

 ;updata dialog data !!!
  (set_tile "func_name" func_name)
  (set_tile "alg_name" alg_name)

 ;set dialog button action
  (action_tile "prev" "(or_func:btn_prev_action)")
  (action_tile "next" "(or_func:btn_next_action)")
  (action_tile "cancel" "(or_func:btn_cancel_action)")

 ;show dialog
  (start_dialog)

 ;unload dialog resource and delete temp dcl file
  (unload_dialog dcl_id)
  (vl-file-delete fname)
  (princ) ;end

)
 ;----------------------------------------------
 ;----------------------------------------------


 ;----------------------------------------------
 ;dialog button action

 ;dialog button action "cancel"
(defun or_func:btn_cancel_action ()
  (setq or_func:dlg_use_exit_flag T)
  (setq or_func:dlg_use_index 0)
  (done_dialog 0)
)

 ;dialog button action "prev"
(defun or_func:btn_prev_action ()
 ;change index to new value and set exit flag nil to open dialog again
  (setq or_func:dlg_use_exit_flag nil)
  (setq or_func:dlg_use_index
  (- or_func:dlg_use_index
     or_func:dlg_use_max_items_per_page
  )
  )
  (if (< or_func:dlg_use_index 0)
    (setq or_func:dlg_use_index
    (* (/ or_func:dlg_use_display_data_len
   or_func:dlg_use_max_items_per_page
       )
       or_func:dlg_use_max_items_per_page
    )
    )
  )
  (done_dialog 0)
)

 ;dialog button action "next"
(defun or_func:btn_next_action ()
 ;change index to new value and set exit flag nil to open dialog again
  (setq or_func:dlg_use_exit_flag nil)
  (setq or_func:dlg_use_index
  (+ or_func:dlg_use_index
     or_func:dlg_use_max_items_per_page
  )
  )
  (if (> or_func:dlg_use_index or_func:dlg_use_display_data_len)
    (setq or_func:dlg_use_index 0)
  )
  (done_dialog 0)
)
 ;----------------------------------------------


 ;format 2 digi string 9 => "09"
(defun or_func:format_2digi (digi / str)
  (if (< digi 10)
    (setq str (strcat "0" (rtos digi 5)))
    (setq str (rtos digi 5))
  )
  str ;return
)

 ;shoutcut function for dyn_create dlc resource
 ;get dcl resource components
(defun or_func:get_dcl_resource_components (/ dcl_content)
  (setq dcl_content
  "alg_block_name : column {
: row {
: text {
label = \"Function name:\" ;
key = \"func_name_label\" ;
}
: text {
label = \"[funtion name here]\" ;
key = \"func_name\" ;
alignment = right ;
}
spacer ;
: text {
label = \"Algorithm name:\" ;
key = \"alg_name_label\" ;
}
: text {
label = \"[funtion name here]\" ;
key = \"alg_name\" ;
alignment = right ;
}
}
}
turnpagebutton : column {
: boxed_column {
: row {
: button {
label = \"<< Previous Page\";
key = \"prev\";
mnemonic = \"P\";
alignment = centered;
width = 25;
fixed_width = true;
}
spacer;
: button {
label = \"Next Page >>\";
key = \"next\";
mnemonic = \"N\";
alignment = centered;
width = 25;
fixed_width = true;
}
}
spacer;
}
}
cancelbutton : retirement_button {
label = \"close ocdapr\";
key = \"cancel\";
is_cancel = true;
}
index_label : text {
label = \"[No.]\" ;
fixed_width = true ;
width = 4 ;
alignment = centered ;
}
parameter_label : text {
label = \"[Parameter]\" ;
alignment = centered ;
}
value_label : text {
label = \"[Value]\" ;
alignment = centered ;
}
description_label : text {
label = \"[Description]\" ;
}
index : text {
label = \"00\" ;
fixed_width = true ;
width = 4 ;
alignment = centered ;
}
para_name : text {
label = \"parameter00\" ;
fixed_width = true ;
width = 10 ;
alignment = centered ;
}
para_value : edit_box {
value = \"value 00\" ;
fixed_width = true ;
width = 15 ;
alignment = centered ;
}
description : text {
label = \"some description ...\" ;
fixed_width = true ;
width = 30 ;
}
" )
  dcl_content ;return
)


 ;----------------------------------------------
 ;text output parameters with block type
 ;----------------------------------------------

(defun or_func:display_on_textscr (refined_data blk_type)
  (cond ((= blk_type "ALG")
  (or_func:display_text_alg_blk refined_data)
 )
 ((= blk_type "SIG")
  (or_func:display_text_sig_blk refined_data)
 )
 (t (print "Unknow block..."))
  )
)

 ;text output sig-blk parameters
(defun or_func:display_text_sig_blk (refined_data)
  (print "These are parameters of sig_blk:")
  (print refined_data)
)

 ;text output alg-blk parameters
(defun or_func:display_text_alg_blk
        (refined_data   /
         remove_list    rmv_lst_len
         index     display_data
         func_name     alg_name
        )

 ;remove no useparameter
  (setq remove_list or_func:param_list_need_not_display)
  (setq index 0)
  (setq rmv_lst_len (length remove_list))
  (setq display_data refined_data)
  (while (< index rmv_lst_len)
    (setq display_data
    (vl-remove (assoc (nth index remove_list) display_data)
        display_data
    )
    )
    (setq index (+ index 1))
  )

 ;get block function name alg name from refined data and display
  (setq func_name (cdr (assoc "FUNC_NAME" refined_data)))
  (setq alg_name (cdr (assoc "ALG_NAME" refined_data)))

  (print (strcat "These are "
   func_name
   " parameters of alg_blk:"
   alg_name
  )
  )
 ;display
  (print display_data)
)

 ;----------------------------------------------
 ;find description of parameter use description table
 ;----------------------------------------------

(defun or_func:find_description
       (func_name param_name / fun para description)

  (setq fun (vl-string-trim " " func_name))
  (setq para (vl-string-trim " " param_name))
  (setq description nil)
  (setq description
  (cdr
    (assoc para
    (cdr (assoc fun or_res:ocdapr_param_description_table))
    )
  )
  )
  (if (null description)
    (setq description "")
  )
  description ;return
)

 ;----------------------------------------------
 ;format rawdata make refined data
 ;----------------------------------------------

 ;format raw data change (1000 . "x=y") to (x . y)
(defun or_func:format_rawdata
       (rawdata / index data_len temp refined_data)
  (setq refined_data nil)
  (setq index 0)
  (setq data_len (length rawdata))

  (while (< index data_len)
    (setq temp (cdr (nth index rawdata)))
    (setq refined_data
    (append refined_data
     (list (or_func:split_string temp "="))
    )
    )
    (setq index (+ index 1))
  )

  refined_data ;return
)

 ;split string to key pair "x=y" => (x . y)
(defun or_func:split_string (str seperator / index str1 str2 keypair)
 ;find seperator
  (setq index (vl-string-search seperator str))
 ;extract 2 strings
  (setq str1 (substr str 1 index))
  (setq str2 (substr str (+ index 2)))
  (cons str1 str2) ;return 
)

 ;----------------------------------------------
 ;get block eed raw data with applist "control_builder_west_pcd"
 ;----------------------------------------------

(defun or_func:get_block_rawdata (block / rawdata)
  (setq rawdata
  (cdadr (assoc -3
         (entget block '("control_builder_west_pcd"))
  )
  )
  )
  rawdata ;return
)

 ;----------------------------------------------
 ;check block type use raw data
 ;----------------------------------------------

(defun or_func:check_block_type
       (rawdata / temp data_len index blk_type)
 ;SIGNAL_NAME,ALG_NAME
  (setq data_len (length rawdata))
  (setq blk_type nil)
  (setq index 0)
  (while (and (< index data_len) (null blk_type))
    (setq temp (nth index rawdata))
    (cond ((or_func:find_key temp "SIGNAL_NAME")
    (setq blk_type "SIG")
   )
   ((or_func:find_key temp "ALG_NAME") (setq blk_type "ALG"))
    )
    (setq index (+ index 1))
  )
  blk_type ;return
)

 ;check if key in assoc data
(defun or_func:find_key (data key / temp is_key_found)

  (setq temp (cdr data))
  (setq is_key_found (wcmatch temp (strcat key "=*")))
  is_key_found ;return
)

 ;----------------------------------------------
 ;select block
 ;----------------------------------------------
 ;select block if pickfirst set 1
(defun or_func:ssget_imp (/ ss)
  (if (eq 1 (logand 1 (getvar "pickfirst")))
    (setq ss (ssget "I"))
  )
  ss ;return
)

 ;select block
(defun or_func:select_block (/ ss block ss_len)
  (setq ss (or_func:ssget_imp))
  (setq block nil)

  (if (not ss)
    (progn
      (prompt "\nSelect algorithm body:")
      (command "_.select" "_single" pause)
 ;get the last set selected
      (setq ss (ssget "P"))
    )
  )

  (setq ss_len (sslength ss))
 ;get the first block in set
  (if (> ss_len 0)
    (setq block (ssname ss 0))
  )

  (setq ss nil) ;clear sset
  block ;return
)


 ;----------------------------------------------
 ;display about dialog
 ;----------------------------------------------
(defun or_func:about (/ dcl_id)
  (setq dcl_id (load_dialog "or_res.dcl"))
  (if (not (new_dialog "hello" dcl_id))
    (exit)
  )
  (start_dialog)
  (unload_dialog dcl_id)
  (princ)
)

 楼主| 发表于 2005-10-9 17:35 | 显示全部楼层

怎么没有人呢  高手门不要潜水了  帮帮忙啊   

发表于 2005-10-9 20:09 | 显示全部楼层

认识这些的人可以直接告诉你答案,不认识的,我想没有人有这个耐性去弄明白这么长的代码...

既然你不知道这段代码是干什么的,那你弄来做什么?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-18 22:18 , Processed in 0.191051 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表