明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 18204|回复: 55

[源码] 序号标注-----------------源码

    [复制链接]
发表于 2014-3-12 15:00:29 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2014-3-12 15:44 编辑

序号标注简单繁琐,差不多绘图员都用得着。象PCCAD的序号标注就不错,但如果你没有装PCCAD,打开就看不到了,不通用。
[先吹一下]
本程序用我在明经混了几十年的功力写成,给大家瞬间打通任督促二脉
本程序界面简洁,如图。
采用了(grread T 8)生成序号个数,但基本上看不到闪烁现象,这是我采用了一门独门秘籍。
这项技术,你在《明经》和《晓东》两大论坛上“几乎”看不到,因为它穿着黄帝的新衣。
靠着敏锐的嗅觉,我掀开了这新衣。同时,靠着这嗅觉,打算今年申报10个结构新型专利,力争成功5个,
完成技术部专利申报总量的1/2以上。这意味着接下来的时间里,要少发贴,多写材料。
当猪肉价格5元一斤的时候,我们公司规定,一个专利成果,奖励3K。看看,是不是我快发财了,先祝贺我吧。
因感动于highflybird代码开源,现将《序号标注》源码公之于众,算是为明经做点贡献吧。
高手就别看了

  1. ;;主程序
  2. ;;*DOC* *HHBH* *HHHZ* *HHQZ* 全局变量
  3. (defun C:HHXH (/ CMD1 PLI1 RETURN#)
  4.   ;; 错误处理
  5.   (defun *error* (msg)
  6.     (vl-bt)
  7.     (if        *DOC*
  8.       (_EndUndo *DOC*)
  9.     )
  10.     (while (not (equal (getvar "cmdnames") "")) (command nil))
  11.     (if pli1 (setvar "plinewid" pli1))
  12.     (if cmd1 (setvar "cmdecho" cmd1))
  13.     (princ "\n 出错啦!")
  14.     (princ)
  15.   )
  16.   ;; 设置对话框
  17.   (defun setdata ()
  18.     (if        *HHqz*
  19.       (Set_tile "HHqz" *HHqz*)
  20.     )
  21.     (if        *HHbh*
  22.       (Set_tile "HHbh" *HHbh*)
  23.     )
  24.     (if        *HHhz*
  25.       (Set_tile "HHhz" *HHhz*)
  26.     )
  27.   )
  28.   ;; 取得对话框数据
  29.   (defun getdata ()
  30.     (setq *HHqz* (get_tile "HHqz"))
  31.     (setq *HHbh* (get_tile "HHbh"))
  32.     (setq *HHhz* (get_tile "HHhz"))
  33.   )
  34.   ;; 对话框
  35.   (defun Dialog        (/ DCLID FN FNAME LIN)
  36.     (setq fname (vl-filename-mktemp nil nil ".dcl"))
  37.     (setq fn (open fname "w"))
  38.     (write-line
  39.       "HHXHSC : dialog {label = "自贡运机集团 序号(黄明儒HHXH)";"
  40.       fn
  41.     )
  42.     (write-line "        : boxed_column {           " fn)
  43.     (write-line
  44.       "          : edit_box {label = "前    缀(&Q)"; key = "HHqz"; mnemonic = "Q";edit_width=9;}"
  45.       fn
  46.     )
  47.     (write-line
  48.       "          : edit_box {label = "起始编号(&B)"; key = "HHbh"; mnemonic = "B"; edit_width=9;value="01";} "
  49.       fn
  50.     )
  51.     (write-line
  52.       "          : edit_box {label = "后    缀(&H)"; key = "HHhz"; mnemonic = "H";edit_width=9;}"
  53.       fn
  54.     )
  55.     (write-line "        }" fn)
  56.     (write-line "        : row{" fn)
  57.     (write-line
  58.       "          : button {label = "取----消(&C)";key = "but_Cancel";is_cancel=true;}"
  59.       fn
  60.     )
  61.     (write-line
  62.       "          : button {label = "球形序号(&E)";mnemonic = "E";key = "but_o";}"
  63.       fn
  64.     )
  65.     (write-line
  66.       "          : button {label = "常规序号(&O)";key = "but_OK";is_default=true;}"
  67.       fn
  68.     )
  69.     (write-line "       }" fn)
  70.     (write-line "    }" fn)
  71.     (close fn)
  72.     (setq fn (open fname "r"))
  73.     (setq dclid (load_dialog fname))
  74.     (while (or (eq (substr (setq lin (vl-string-right-trim
  75.                                        "" fn)"
  76.                                        (vl-string-left-trim
  77.                                          "(write-line ""
  78.                                          (read-line fn)
  79.                                        )
  80.                                      )
  81.                            )
  82.                            1
  83.                            2
  84.                    )
  85.                    "//"
  86.                )
  87.                (eq (substr lin 1 (vl-string-search " " lin)) "")
  88.                (not (eq        (substr lin (+ (vl-string-search " " lin) 1) 9)
  89.                         " : dialog"
  90.                     )
  91.                )
  92.            )
  93.     )
  94.     (new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)
  95.     (setdata)
  96.     (action_tile "but_o" "(getdata)(done_dialog 1)")
  97.     (action_tile "but_OK" "(getdata)(done_dialog 2)")
  98.     (setq return# (start_dialog))
  99.     (unload_dialog dclid)
  100.     (close fn)
  101.     (vl-file-delete fname)
  102.   )

  103.   ;;主程序
  104.   (Dialog)
  105.   (or *DOC*
  106.       (setq *DOC* (vla-get-ActiveDocument (vlax-get-acad-object)))
  107.   )
  108.   (_StartUndo *DOC*)                                  ;编组开始
  109. ;; (HH:ayOSMode nil)                                  ;关闭捕捉
  110.   ;;(setq cmd1 (getvar "cmdecho"))
  111.   (setq pli1 (getvar "plinewid"))
  112.   (setvar "plinewid" 0)
  113.   (setvar "cmdecho" 0)
  114.   (cond        ((= return# 1)
  115.          (VL-CATCH-ALL-APPLY 'HH::XHSCe nil)
  116.         )
  117.         ((= return# 2)
  118.          (VL-CATCH-ALL-APPLY 'HH::XHSCo nil)
  119.         )
  120.   )
  121.   (setvar "plinewid" pli1)
  122.   ;;(setvar "cmdecho" cmd1)
  123. ;; (HH:ayOSMode T)                                  ;开户捕捉
  124.   (_EndUndo *DOC*)                                  ;编组结束
  125.   (gc)
  126.   (princ "\n 自贡运机集团黄明儒温馨提示 序号生成:HHXH")
  127.   (princ)
  128. )
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2019-3-23 16:32:39 | 显示全部楼层
这个人真是人才,沾沾自喜写了一堆bug
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-17 09:47:00 | 显示全部楼层
ccc230 发表于 2020-8-14 21:22
序号标注源码,加5楼和8楼加进去才能用,我不知道代码加在哪个位置,指点下,代码不在行啊

谁让你在我楼下呢,这是我用的,拿去用吧
;标注序号程序
    (defun c:bh (/ p1 p2 p3 ang1 bx bxh circ_1 txt_h juge)
    (Command "osmode" "20" )
    (setq circ_r 1.55)          ;圆圈半径
    (setq txt_h 2)           ;字高
    (while (/= juge "Exit")
    (if (not bx) (setq bx 1 ))
    (setq bxh (getint " \ n请输入序号 " ))          ;输入序号
    (initget 1 "getpoint")                  ;限制输入,使第一点不容为空
    (setq p1 (getpoint " \ n请选择起点:"))             ;选择第一点
    (setq p2 (getpoint p1 " \ n请选择第二点(回车表示无):")) ;直线的另一点
    (if bxh (setq bx bxh))
    (cond (p2
       (setq ang1 (angle p1 p2))                ;为直线时的情形
       (setq p3 (polar p1 ang1 ( - (distance p1 p2) circ_r)))         ;画圆,线
       (command "pline" (polar p1 ang1 0.2)
             "W" 0.8 0.8 "A" "CE" p1 "A" 359.9 "L" "W" 0 0 p3"")
             (command "circle" p2 circ_r )
             (command "text" "J" "M" p2 txt_h 0 bx)  ;写序号
            )
            ((not p2)        ;仅为一个点时的情形
              (command "circle" p1 circ_r)     ;画圆
            (command"text" "J" "M" p1 txt_h 0 bx)  ;写序号
          )
         )
         (setq bx ( + bx 1))
         (initget "Continue Exit")     ;定义类型关键字
         (setq juge (getkword" \ n 退出(Exit)/继续 (Continue):"))
       )
         (princ)
)
发表于 2018-8-1 16:33:50 | 显示全部楼层
大师帮忙看下啊,点击标注后出错了!
命令:
命令:
命令: HHXH
反向跟踪:
[0.51] (VL-BT)
[1.47] (*ERROR* "no function definition: _STARTUNDO")
[2.42] (_call-err-hook #<SUBR @000000003f85f110 *ERROR*> "no function
definition: _STARTUNDO")
[3.36] (sys-error "no function definition: _STARTUNDO")
:ERROR-BREAK.31 nil
[4.28] (#<SUBR @0000000038c38bb0 null-fun-hk> #<VLA-OBJECT IAcadDocument
00000000258cd5f0>)
[5.24] (_STARTUNDO #<VLA-OBJECT IAcadDocument 00000000258cd5f0>)
[6.19] (C:HHXH)
[7.15] (#<SUBR @000000003f85f480 -rts_top->)
[8.12] (#<SUBR @0000000038c38700 veval-str-body> "(C:HHXH)" T #<FILE internal>)
:CALLBACK-ENTRY.6 (:CALLBACK-ENTRY)
:ARQ-SUBR-CALLBACK.3 (nil 0)
; 错误: *error* 函数中出错无函数定义: _ENDUNDO

 楼主| 发表于 2014-3-12 15:01:15 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2014-9-5 11:07 编辑

怎么附件加不上去了,暂留着,等能放上去

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-3-12 15:02:09 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2014-3-12 15:29 编辑

奇怪呀,进入高级模式,不能放附件了。
 楼主| 发表于 2014-3-12 15:26:16 | 显示全部楼层
请先欣赏105水平大转弯管状带式输送机。虽然我不能确定是否世界第一,至少国内是第一条这么大的水平转弯角度,而且一次试车成功。
前年设计完成,去年开始运行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-3-12 15:34:55 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2014-3-12 15:48 编辑

本来想放在二楼的,现在只能放在这儿了!!

  1. ;;编组开始;(command "_.undo" "be")
  2. (defun _StartUndo (*DOC*)
  3.   (_EndUndo *DOC*)
  4.   (vla-StartUndoMark *DOC*)
  5. )
  6. ;;结束编组;(if (= 8 (logand (getvar "undoctl") 8)) (command "_.undo" "_e"))
  7. (defun _EndUndo        (*DOC*)
  8.   (if (= 8 (logand 8 (getvar 'UNDOCTL)))
  9.     (vla-EndUndoMark *DOC*)
  10.   )
  11. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

用不上,看你老黄吹成这样!不瞧一下,说不过去  发表于 2014-3-12 17:29

评分

参与人数 2明经币 +2 收起 理由
669423907 + 1 很给力!如果可以用鼠标点取文字作为序号的字.
zctao1966 + 1 很给力!

查看全部评分

发表于 2014-3-12 16:38:21 | 显示全部楼层
请问下,*DOC*这个是什么东西,有什么用
发表于 2014-3-12 16:56:34 | 显示全部楼层
lostbalance 发表于 2014-3-12 16:38
请问下,*DOC*这个是什么东西,有什么用


(setq *doc*   (vla-get-activedocument  (vlax-get-acad-object)))
发表于 2014-3-12 20:30:12 | 显示全部楼层
试用了一下,效果不错!赞一个!

补一个函数
  1. (defun HH:ayOSMode (isOpenSnap)
  2. (if isOpenSnap
  3.   (setvar "osmode" (rem (getvar "osmode") 703))
  4.   (setvar "osmode" (+ (rem (getvar "osmode") 703) 703))
  5. );end_if
  6. );end_defun

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 很给力!

查看全部评分

发表于 2014-3-12 21:07:46 | 显示全部楼层
emk 发表于 2014-3-12 16:56
(setq *doc*   (vla-get-activedocument  (vlax-get-acad-object)))

这条我看到了,就是不知道后面两个函数什么用的,得到的*doc*有什么作用

点评

(vla-EndUndoMark *DOC*)  发表于 2014-3-13 11:42
发表于 2014-3-13 11:53:46 | 显示全部楼层
牛逼,一定要顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 07:20 , Processed in 0.212862 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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