序号生成------------苦闷中
今天X版对我说,好几天没发贴了,确实,因为一直在苦闷中。对于序号是图中简单繁琐的一件事情,我想应该有如下三个功能
1 生成
2 排序(http://bbs.mjtd.com/thread-108678-1-1.html)
3 修改
对于后两者,好象好解决
对于前者,谁有比较完善的程序? 这个自己写写,这么多项,工作量比较大 生成序号的同时可以生成明细栏就好了 可惜我还没学对话框啊 本帖最后由 linshiyin2 于 2014-2-28 09:25 编辑
如何区分编写的序号,在dxf中加入特殊的标记?或者使用块,序号就是块属性?我现在使用的是字体颜色进行区分,一个比较少用的颜色区分哪些是自己的编号,至于编号的增减、排序,最好是删除某一个自动的调整其他的编号,增加某一个其他的也自动调整序号,这样比较自动并且不容易出错。我想块属性可能解决起来最方便。目前我将就着使用“序号铲子”删除一个序号其他比它大的自动减少一个。 另外我有一部分序号生成的程序,别人的,基本还行,(defun ljxh (/ DIA DX DXX DY K KEEP LAB_NO N OS_OLD TE WHAT)
(msave '("cmdecho" "blipmode" "aunits" "clayer" "cecolor" "PLINEWID" "CELTYPE" "osmode"))
(setvar "cmdecho" 0)
(setq n 0
what 3
lab_no 1
)
;;;(setq ucs_name "ljh")
;;;(command "ucs" "del" ucs_name)
;;;(command "ucs" "save" ucs_name)
(command "ucs" "w")
(setvar "measurement" 1)
(setq os_old (getvar "osmode"))
(setvar "osmode" 0)
(command "layer" "s" "0" "c" "white" "" "")
(command "layer" "m" "draw" "c" "white" "" "")
(command "layer" "m" "center" "c" "red" "" "l" "center" "" "")
(command "layer" "m" "dashed" "c" "white" "" "l" "dashed" "" "")
(command "layer" "m" "bhatch" "c" "blue" "" "")
(command "layer" "m" "dim" "c" "white" "" "")
(command "layer" "m" "data" "lo" "data" "")
(command "layer" "s" "0" "")
(defun do_help()
(help "cadhelp.hlp" "ljxh")
)
(defun label_draw (/ ty pp pp1 pt an num m mm ss)
(setq an 0)
(setq ty lab_no)
(while (/= ty 0)
(setq dx 20
dy 10
dxx 5
m(get_m)
)
(prompt "\n请选择标注零件")
(princ)
(setq pp (getpoint))
(prompt "\n请选择标注位置")
(princ)
(setq pp1 (getpoint pp))
(setq pt pp1)
(command "layer" "s" "标注" "")
(command "line" pp pp1 "")
(if (> (car pp) (car pp1))
(setq an pi)
(setq an 0.0)
)
(setq pp (cdr (assoc 11 (entget (entlast)))))
(setq k 0)
(setq num lab_no)
(if (>= lab_no 4) (setq num (- lab_no 2)))
(repeat num
(setq k (1+ k))
(setq ss (ssadd));;将 ss 设为空选择集
(if (/= k 1)
(progn
(if (>= lab_no 4)
(command "line" pp (setq pp (polar pp (/ pi 2.0) dy)) "")
(progn
(setq pp (polar pp an dx))
(setq pp1 (polar pp an dxx))
(command "pline"
pp
"w"
0
""
(polar (polar pp an (/ dxx 2)) (/ pi -2) 1)
pp1
""
)
(setq pp pp1)
)
)
(ssadd (entlast) ss);;添加这个图元到选择集
)
)
(command "pline" pp "w" 0.3 "" (polar pp an dx) "")
(ssadd (entlast) ss);;添加这个图元到选择集
(COMMAND "style" "ljxh_st" "Times New Roman" 4.0 0.8 10 "" "")
(setq te (getstring "\n输入零件序号:"))
(command "text")
(if (= an 0)
(command (polar pp (/ pi 6.0) 4.0) ""te)
(command (polar (polar pp an dx) (/ pi 6.0) 4.0) "" te)
)
(ssadd (entlast) ss);;添加这个图元到选择集
(COMMAND "scale" ss "" pt (rtos m 2 6));;缩放
)
(setq keep (getstring "\n按X键退出当前标注\\其他任意键继续标注:"))
(if (or (= keep "x") (= keep "X"))
(setq ty 0)
)
)
(if (not (new_dialog "bom_label" dia))
(exit)
)
)
(defun vslide (key s_name n / x y)
(setq x (dimx_tile key))
(setq y (dimy_tile key))
(start_image key)
(fill_image n -5 x y 2)
(slide_image n -5 x y (strcat "lable(" s_name ")"))
(end_image)
)
(setq dia (load_dialog "ljxh.dcl"))
(if (not (new_dialog "bom_label" dia))
(exit)
)
(while (> what 0)
(vslide "k_lable1" "lable1" 0)
(vslide "k_lable2" "lable2" 0)
(vslide "k_lable3" "lable3" 0)
(vslide "k_lable4" "lable4" 0)
(vslide "k_lable5" "lable5" 0)
(vslide "k_lable6" "lable6" 0)
(action_tile "k_lable1" "(setq lab_no 1)")
(action_tile "k_lable2" "(setq lab_no 2)")
(action_tile "k_lable3" "(setq lab_no 3)")
(action_tile "k_lable4" "(setq lab_no 4)")
(action_tile "k_lable5" "(setq lab_no 5)")
(action_tile "help" "(do_help)")
(action_tile "accept" "(done_dialog 2)")
(setq what (start_dialog))
(if (= what 2)
(label_draw)
)
)
(unload_dialog dia)
(mrsave)
;;;(command "layer" "s" "draw" "")
;;;(command "ucs" "r" ucs_name)
;;;(command "ucs" "del" ucs_name)
(setvar "cmdecho" 1)
(setvar "osmode" os_old)
) linshiyin2 发表于 2014-2-28 09:24 static/image/common/back.gif
如何区分编写的序号,在dxf中加入特殊的标记?或者使用块,序号就是块属性?我现在使用的是字体颜色进行区分 ...
使用带属性的块也行呀。即使带反应,删除一个,其它减少这好办,但增加呢?我觉得反应器麻烦且易出错,还是用text好些。目前我都是用的leader 自贡黄明儒 发表于 2014-2-28 10:02 static/image/common/back.gif
使用带属性的块也行呀。即使带反应,删除一个,其它减少这好办,但增加呢?我觉得反应器麻烦且易出错,还 ...
减少好做了增加也就好做了,增加的时候选择到所有的标记的编号,根据序号大小大于的增加1个即可,关键是我现在没有做成集成了,都是一个一个的散乱程序。 ;; 自动序号
本帖最后由 自贡黄明儒 于 2014-2-28 11:56 编辑
xyp1964 发表于 2014-2-28 11:45 http://bbs.mjtd.com/static/image/common/back.gif
;; 自动序号
刚才我做了一个界面,觉得比你的界面要友好些
其实应该只有两类,根据鼠标动判断垂直或者水平
HHXHSC : dialog {label = "自贡运机集团 序号(黄明儒HHXH)";
: boxed_column {
: edit_box {label = "前 缀(&Q)"; key = "HHqz"; mnemonic = "Q";edit_width=9;}
: edit_box {label = "起始编号(&B)"; key = "HHbh"; mnemonic = "B"; edit_width=9;value="01";}
: edit_box {label = "后 缀(&H)"; key = "HHhz"; mnemonic = "H";edit_width=9;}
}
: row{
: button {label = "取----消(&C)";key = "but_Cancel";is_cancel=true;}
: button {label = "球形序号(&E)";mnemonic = "E";key = "but_o";}
: button {label = "常规序号(&O)";key = "but_OK";is_default=true;}
}
}