找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4900|回复: 29

[原创]:带属性序号球,有动态拖拽效果,欢迎测试使用![源码免币] (第二版)

[复制链接]
发表于 2006-11-8 15:05:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
欢迎各位测试使用!含注释,欢迎提出修改建议及简化方法!程序中含动态旋转的“奔驰”三角星标志,纯属好玩。

[COLOR] 本段代码为第一版,第二版见10楼,增加少许功能![/COLOR]



  1. ;;属性序号球  BY HB.LEE 2006-11-08;
  2. ;;得到晓东cad舟自横指点,动态移动时采用VLA-PUT-INSERTPOINT;
  3. ;;序号球子程序参考LUCUS (C:MBA) 程序。
  4. (PRINC "\n*** 带属性序号球绘制, 命令: GJ . BY HB.Lee  2006-11-08. ***")
  5. (DEFUN C:GJ  (/                ATTBALL          BL            DEFNUM    FIRSTPT
  6.               NUM        OLDATTD          OLDATTR   OLDCMD    OLDLAY
  7.               OLDOS        SECONDPT  STARTPT   STR              VPREATT)
  8.     (VL-LOAD-COM)
  9.     ;;错误处理函数
  10.     (DEFUN *$MYERROR$*        (MSG)
  11.         (REDRAW)
  12.         (SETVAR "OSMODE" OLDOS)
  13.         (SETVAR "CLAYER" OLDLAY)
  14.         (SETVAR "ATTREQ" OLDATTR)
  15.         (SETVAR "ATTDIA" OLDATTD)
  16.         (SETVAR "CURSORSIZE" OLDCURS)
  17.         ;;确保出错时插入的块能删除
  18.         (IF ATTBALL
  19.             (ENTDEL ATTBALL))
  20.         (IF NUM
  21.             (VL-REGISTRY-WRITE
  22.                 (STRCAT "HKEY_CURRENT_USER\\LHBTOOLS\" "GJH")
  23.                 "GJH"
  24.                 (ITOA NUM)
  25.                 )
  26.             )
  27.         (SETVAR "CMDECHO" OLDCMD)
  28.         (SETQ *ERROR* &OLDERR&)
  29.         (PRINC)
  30.         )
  31.     (SETQ &OLDERR& *ERROR*)
  32.     (SETQ *ERROR* *$MYERROR$*)
  33.     (SETQ OLDLAY (GETVAR "CLAYER"))
  34.     (SETQ OLDOS (GETVAR "OSMODE"))
  35.     (SETQ OLDCMD (GETVAR "CMDECHO"))
  36.     (SETQ OLDATTR (GETVAR "ATTREQ"))
  37.     (SETQ OLDATTD (GETVAR "ATTDIA"))
  38.     (SETQ OLDCURS (GETVAR "CURSORSIZE"))
  39.     (SETVAR "CMDECHO" 0)
  40.     (COMMAND ".UNDO" "BE")
  41.     (SETQ DEFNUM
  42.              (LHB-REGSAVE-INT "GJH" "1" "\n请输入序号的开始值" 6 "U")
  43.           )
  44.     (SETQ BL (GETVAR "DIMSCALE"))
  45.     (SETQ NUM DEFNUM)
  46.     (SETQ STR (ITOA NUM))
  47.     ;;捕捉方式设定
  48.     (SETVAR "OSMODE" (+ 1 2 32 128 512))
  49.     (SETVAR "ATTREQ" 1)
  50.     (SETVAR "ATTDIA" 0)
  51.     (SETQ STARTPT (GETPOINT "\n请输入构件号引出点:"))
  52.     (WHILE STARTPT
  53.         (IF (NULL (TBLOBJNAME "BLOCK" "LHB_NO"))
  54.             (PROGN
  55.                 (ENTMAKE_ATT (* BL 2.5) STR)
  56.                 (SETQ FIRSTPT (VLAX-MAKE-SAFEARRAY
  57.                                   VLAX-VBDOUBLE
  58.                                   '(0 . 2)))
  59.                 (VLAX-SAFEARRAY-FILL FIRSTPT '(0.0 0.0 0.0))
  60.                 (SETQ SECONDPT (VLAX-MAKE-SAFEARRAY
  61.                                    VLAX-VBDOUBLE
  62.                                    '(0 . 2)))
  63.                 (VLAX-SAFEARRAY-FILL
  64.                     SECONDPT
  65.                     (POLAR STARTPT 0 (* BL 2.5)))
  66.                 (SETQ VPREATT (VLAX-ENAME->VLA-OBJECT (ENTLAST)))
  67.                 (VLA-MOVE VPREATT FIRSTPT SECONDPT)
  68.                 )
  69.             ;;属性块插入
  70.             (COMMAND "-INSERT"
  71.                      "LHB_NO"
  72.                      (POLAR STARTPT 0 (* BL 2.5))
  73.                      1
  74.                      1
  75.                      0
  76.                      STR
  77.                      )
  78.             )
  79.         (SETQ ATTBALL (ENTLAST))
  80.         ;;动态预览
  81.         (VIEW_GJ ATTBALL STARTPT BL)
  82.         (SETQ ATTBALL NIL)
  83.         (SETQ NUM (1+ NUM))
  84.         (SETQ STR (ITOA NUM))
  85.         (SETVAR "OSMODE" (+ 1 2 32 128 512))
  86.         (INITGET "B")
  87.         (SETQ
  88.             STARTPT
  89.                (GETPOINT
  90.                    (STRCAT
  91.                        "\n请输入构件号引出点/改变序号(B)/[当前序号<"
  92.                        STR
  93.                        ">]:"
  94.                        )
  95.                    )
  96.             )
  97.         (WHILE (OR (= STARTPT "B") (= STARTPT "b"))
  98.             (VL-REGISTRY-WRITE
  99.                 (STRCAT "HKEY_CURRENT_USER\\LHBTOOLS\" "GJH")
  100.                 "GJH"
  101.                 (ITOA NUM)
  102.                 )
  103.             (SETQ DEFNUM
  104.                      (LHB-REGSAVE-INT
  105.                          "GJH"                 "1"
  106.                          "\n请输入序号的开始值"
  107.                          6                 "U")
  108.                   )
  109.             (SETQ NUM DEFNUM)
  110.             (SETQ STR (ITOA NUM))
  111.             (SETQ STARTPT
  112.                      (GETPOINT
  113.                          (STRCAT
  114.                              "\n请输入构件号引出点/改变序号(B)/[当前序号<"
  115.                              STR
  116.                              ">]:"
  117.                              )
  118.                          )
  119.                   )
  120.             )
  121.         )
  122.     (VL-REGISTRY-WRITE
  123.         (STRCAT "HKEY_CURRENT_USER\\LHBTOOLS\" "GJH")
  124.         "GJH"
  125.         (ITOA NUM)
  126.         )
  127.     (SETVAR "CLAYER" OLDLAY)
  128.     (SETVAR "ATTREQ" OLDATTR)
  129.     (SETVAR "ATTDIA" OLDATTD)
  130.     (SETVAR "CURSORSIZE" OLDCURS)
  131.     (COMMAND ".UNDO" "E")
  132.     (SETVAR "OSMODE" OLDOS)
  133.     (SETVAR "CMDECHO" OLDCMD)
  134.     (SETQ *ERROR* &OLDERR&)
  135.     ;(PRINC "\n***  构件号绘制[ COMMAND:GJ ], BY HB.LEE 06-11-08  *** ")
  136.     (PRINC)
  137.     )


  138. ;;;构件编号动态预览
  139. (DEFUN VIEW_GJ        (VOBJ         VBASEPT VBL         /         DIST         FIRSTPT
  140.                  LOOP_ID NEWCENPT         PT1         PT10         PT11
  141.                  PT12         PT2         PT3         PT4         PT5         PT6
  142.                  PT7         PT8         PT9         VANGLE         VPOINT         VPOINTENT
  143.                  MOVEPT)
  144.     (SETQ LOOP_ID T)
  145.     (SETQ ALPHA 0)
  146.     (SETVAR "CURSORSIZE" 1)                ;将光标大小设置为1,最小尺寸
  147.     (PRINC "\n请输入构件号标注点:")
  148.     (WHILE LOOP_ID
  149.         (SETQ VPOINTENT (GRREAD T 4 1))
  150.         (IF (= 5 (CAR VPOINTENT))        ;鼠标跟踪
  151.             (PROGN
  152.                 (REDRAW)
  153.                 (SETQ VPOINT (CADR VPOINTENT))
  154.                 (SETQ MOVEPT VPOINT)        ;记录直线第二点
  155.                 (SETQ DIST (DISTANCE VBASEPT VPOINT))
  156.                 (SETQ VANGLE (ANGLE VBASEPT VPOINT))
  157.                 (SETQ NEWCENPT (POLAR VBASEPT
  158.                                       VANGLE
  159.                                       (+ DIST (* VBL 2.5))))
  160.                 (SETQ FIRSTPT (VLAX-MAKE-SAFEARRAY
  161.                                   VLAX-VBDOUBLE
  162.                                   '(0 . 2)))
  163.                 (VLAX-SAFEARRAY-FILL FIRSTPT NEWCENPT)
  164.                 (VLA-PUT-INSERTIONPOINT
  165.                     (VLAX-ENAME->VLA-OBJECT VOBJ)
  166.                     FIRSTPT)
  167.                 (GRVECS (LIST 2 VBASEPT VPOINT))
  168.                 ;;================================================================
  169.                 ;;动态旋转“奔驰”标志,此段可去掉,纯属好玩。
  170.                 ;;标注点标志
  171.                 (SETQ PT1 (POLAR VPOINT (+ ALPHA (* PI 0.5)) (* VBL 1.0))
  172.                       PT2 (POLAR VPOINT (+ ALPHA (/ (* PI 7) 6)) (* VBL 1.0))
  173.                       PT3 (POLAR VPOINT (+ ALPHA (/ (* PI 11) 6)) (* VBL 1.0))
  174.                       PT4 (POLAR VPOINT (+ ALPHA (/ (* PI 5) 6)) (* VBL 0.268))
  175.                       PT5 (POLAR VPOINT (+ ALPHA (* PI 1.5)) (* VBL 0.268))
  176.                       PT6 (POLAR VPOINT (+ ALPHA (/ PI 6)) (* VBL 0.268))
  177.                       )
  178.                 (GRVECS        (LIST 1            PT1          VPOINT      1            PT2          VPOINT
  179.                               1            PT3          VPOINT      6            PT4          VPOINT
  180.                               6            PT5          VPOINT      6            PT6          VPOINT
  181.                               6            PT1          PT4        6     PT4   PT2          6
  182.                               PT2   PT5          6        PT5   PT3   6          PT3
  183.                               PT6   6          PT6        PT1)
  184.                         )
  185.                 ;;引出点标志
  186.                 (SETQ PT7  (POLAR VBASEPT (+ ALPHA (* PI 0.5)) (* VBL 1.0))
  187.                       PT8  (POLAR VBASEPT (+ ALPHA (/ (* PI 7) 6)) (* VBL 1.0))
  188.                       PT9  (POLAR VBASEPT (+ ALPHA (/ (* PI 11) 6)) (* VBL 1.0))
  189.                       PT10 (POLAR VBASEPT
  190.                                   (+ ALPHA (/ (* PI 5) 6))
  191.                                   (* VBL 0.268))
  192.                       PT11 (POLAR VBASEPT (+ ALPHA (* PI 1.5)) (* VBL 0.268))
  193.                       PT12 (POLAR VBASEPT (+ ALPHA (/ PI 6)) (* VBL 0.268))
  194.                       )
  195.                 (GRVECS        (LIST 1             PT7    VBASEPT          1         PT8
  196.                               VBASEPT            1           PT9          VBASEPT
  197.                               5             PT10   VBASEPT          5         PT11
  198.                               VBASEPT            5           PT12          VBASEPT
  199.                               5             PT7    PT10   5          PT10         PT8
  200.                               5             PT8    PT11   5          PT11         PT9
  201.                               5             PT9    PT12   5          PT12         PT7)
  202.                         )
  203.                 ;;设置三角星旋转速度,若想加快可将0.056适当加大,如0.112.
  204.                 (SETQ ALPHA (+ ALPHA (* PI 0.056)))
  205.                 ;;================================================================
  206.                 )
  207.             )
  208.         ;; 若点击鼠标左、右键或键盘任意按键,则取得当前鼠标位置,并绘制符号
  209.         (IF (OR        (= 3 (CAR VPOINTENT))
  210.                 (= 2 (CAR VPOINTENT))
  211.                 (= 11 (CAR VPOINTENT))
  212.                 )
  213.             (PROGN
  214.                 (REDRAW)
  215.                 (SETQ LOOP_ID NIL)
  216.                 ;;绘制直线
  217.                 (SETVAR "CLAYER" "构件符号")
  218.                 (COMMAND "_.LINE" VBASEPT MOVEPT "")
  219.                 )
  220.             )
  221.         )                                ;END WHILE
  222.     (SETVAR "CURSORSIZE" OLDCURS)
  223.     (PRINC)
  224.     )                                        ;DEFUN VIEW_GJ

  225. ;;建立属性编号
  226. (DEFUN ENTMAKE_ATT  (CIRRAD TEXT / CHK_LAYER CHK_STYLE BLKNAME BLKN LST0
  227.                      LST1)
  228.     ;;建立编号圆圈图层
  229.     (SETQ CHK_LAYER (TBLSEARCH "LAYER" "构件符号"))
  230.     (IF        (= CHK_LAYER NIL)
  231.         (PROGN
  232.             (ENTMAKE (LIST
  233.                          '(0 . "LAYER")
  234.                          '(100 . "AcDbSymbolTableRecord")
  235.                          '(100 . "AcDbLayerTableRecord")
  236.                          '(6 . "continuous") ;线型
  237.                          '(62 . 2)        ;颜色
  238.                          '(70 . 0)        ;图层状态
  239.                          (CONS 2 "构件符号") ;图层名
  240.                          )
  241.                      )
  242.             )
  243.         )

  244.     ;;建立编号文字图层
  245.     (SETQ CHK_LAYER (TBLSEARCH "LAYER" "构件编号"))
  246.     (IF        (= CHK_LAYER NIL)
  247.         (PROGN
  248.             (ENTMAKE (LIST
  249.                          '(0 . "LAYER")
  250.                          '(100
  251.                            .
  252.                            "AcDbSymbolTableRecord")
  253.                          '(100 . "AcDbLayerTableRecord")
  254.                          '(6 . "continuous") ;线型
  255.                          '(62 . 6)        ;颜色
  256.                          '(70 . 0)        ;图层状态
  257.                          '(2 . "构件编号") ;图层名
  258.                          )
  259.                      )
  260.             )
  261.         )

  262.     ;;建立编号文字字型
  263.     (SETQ CHK_STYLE (TBLSEARCH "STYLE" "NUM_STYLE"))
  264.     (IF        (= CHK_STYLE NIL)
  265.         (ENTMAKE (LIST
  266.                      '(0 . "STYLE")        ;对象名称
  267.                      '(100 . "AcDbSymbolTableRecord")
  268.                      '(100
  269.                        .
  270.                        "AcDbTextStyleTableRecord") ;子类标记
  271.                      '(2 . "NUM_STYLE")        ;字体样式名
  272.                      '(70 . 0)                ;标注位码
  273.                      '(40 . 0.0)        ;文字高度
  274.                      '(41 . 0.7)        ;宽度系数
  275.                      '(50 . 0.0)        ;字斜角
  276.                      '(71 . 0)                ;文字生成标注位码2=反向,4=颠倒
  277.                      '(3 . "TSSDENG.shx") ;西文字体名
  278.                      '(4 . "HZTXT.shx")        ;中文字体名
  279.                      ) ;_ 结束LIST
  280.                  ) ;_ 结束ENTMAKE
  281.         ) ;_ 结束IF
  282.    
  283.     ;;设置属性块名
  284.     (SETQ BLKNAME "LHB_NO")

  285.     (ENTMAKE
  286.         (LIST '(0 . "BLOCK")
  287.               (CONS 2 BLKNAME)                ;图块名称
  288.               '(70 . 2)                        ;设置属性块是否可以编辑
  289.               '(10 0.0 0.0 0.0))        ;基准点
  290.         )
  291.     (ENTMAKE (LIST '(0 . "CIRCLE")
  292.                    '(100 . "AcDbEntity")
  293.                    '(67 . 0)
  294.                    '(8 . "构件符号")        ;图层名称
  295.                    '(100 . "CIRCLE")
  296.                    '(10 0.0 0.0 0.0)        ;中心点
  297.                    (CONS 40 CIRRAD)        ;半径
  298.                    '(210 0.0 0.0 1.0)
  299.                    )
  300.              )
  301.     (ENTMAKE (LIST '(0 . "ATTDEF")
  302.                    '(100 . "AcDbEntity")
  303.                    '(67 . 0)
  304.                    '(8 . "构件编号")        ;图层名称
  305.                    '(100 . "AcDbText")
  306.                    '(10 -1.08 -1.75 0.0) ;文字起点
  307.                    (CONS 40 (+ CIRRAD 1.0)) ;文字高度
  308.                    '(1 . "A")                ;默认值
  309.                    '(50 . 0)                ;文字旋转
  310.                    '(41 . 0.7)                ;相对X比例系数
  311.                    '(51 . 0.0)                ;倾斜角度
  312.                    '(7 . "NUM_STYLE")        ;文字字型
  313.                    '(71 . 0)                ;文字产生的标志
  314.                    '(72 . 1)                ;水平文字的对齐类型
  315.                    '(11 0.0 0.0 0.0)        ;对齐点,只有在72与74非0才有意义
  316.                    '(210 0.0 0.0 1.0)        ;挤出方向
  317.                    '(100 . "AcDbAttributeDefinition")
  318.                    '(3 . "编号属性")        ;提示字符串
  319.                    '(2 . "A")                ;卷标字符串
  320.                    '(70 . 0)                ;属性标志
  321.                    '(73 . 0)                ;字段长度
  322.                    '(74 . 2)                ;垂直文字的对齐类型
  323.                    )
  324.              )
  325.     (SETQ BLKN (ENTMAKE '((0 . "ENDBLK"))))
  326.     (SETQ LST0 (LIST '(0 . "INSERT") '(100 . "AcDbEntity") '(67 . 0)
  327.                      '(8 . "构件符号")        ;图层
  328.                      '(100 . "AcDbBlockReference") '(66 . 1) '(10 0.0 0.0 0.0)
  329.                                         ;插入点
  330.                      '(41 . 1.0)        ;x
  331.                      '(42 . 1.0)        ;y
  332.                      '(43 . 1.0)        ;z
  333.                      '(50 . 0.0)        ;旋转角度
  334.                      '(70 . 0)                ;插入行数
  335.                      '(71 . 0)                ;插入列数
  336.                      '(44 . 0.0)        ;行间距
  337.                      '(45 . 0.0)        ;列间距
  338.                      '(210 0.0 0.0 1.0))
  339.           )
  340.     (SETQ LST1 (APPEND LST0 (LIST (CONS 2 BLKN))))
  341.     (ENTMAKE LST1)
  342.     (ENTMAKE (LIST '(0 . "ATTRIB")
  343.                    '(5 . "26")
  344.                    '(100 . "AcDbEntity")
  345.                    '(67 . 0)
  346.                    '(8 . "构件编号")        ;图层名称
  347.                    '(100 . "AcDbText")
  348.                    '(10 -1.08 -1.75 0.0) ;文字起点
  349.                    (CONS 40 (+ CIRRAD 1.0)) ;文字高度
  350.                    (CONS 1 TEXT)        ;默认值
  351.                    '(50 . 0)                ;文字旋转
  352.                    '(41 . 0.7)                ;相对X比例系数
  353.                    '(51 . 0.0)                ;倾斜角度
  354.                    '(7 . "NUM_STYLE")        ;文字字型
  355.                    '(71 . 0)                ;文字产生的标志
  356.                    '(72 . 1)                ;水平文字的对齐类型
  357.                    '(11 0.0 0.0 0.0)        ;对齐点,只有在72与74非0才有意义
  358.                    '(210 0.0 0.0 1.0)        ;挤出方向
  359.                    '(100 . "AcDbAttribute")
  360.                    (CONS 2 TEXT)        ;卷标字符串
  361.                    '(70 . 0)                ;属性标志
  362.                    '(73 . 0)                ;字段长度
  363.                    '(74 . 2)                ;垂直文字的对齐类型
  364.                    )
  365.              )
  366.     (ENTMAKE '((0 . "SEQEND")))
  367.     (PRINC)
  368.     )                                        ;DEFUN ENTMAKE_ATT

  369. ;;输入字符串记录函数,记录入注册表的相应位置
  370. (DEFUN LHB-REGSAVE-INT
  371.        (KEY-PATH DEF-VAL MSG BITS KWORD / READSTR NEWSTR)
  372.     (SETQ READSTR
  373.              (VL-REGISTRY-READ
  374.                  (STRCAT "HKEY_CURRENT_USER\\LHBTOOLS\" KEY-PATH)
  375.                  KEY-PATH
  376.                  )
  377.           )
  378.     (IF        (= READSTR NIL)
  379.         (SETQ READSTR DEF-VAL)
  380.         )
  381.     (GRAPHSCR)
  382.     (IF        (AND READSTR (/= READSTR ""))
  383.         (SETQ MSG     (STRCAT "\n" MSG "<" READSTR ">:")
  384.               READSTR (ATOI READSTR)
  385.               )
  386.         (SETQ MSG (STRCAT "\n" MSG ":"))
  387.         )
  388.     (INITGET BITS KWORD)
  389.     (SETQ NEWSTR (GETINT MSG))
  390.     (IF        (NOT NEWSTR)
  391.         (SETQ NEWSTR READSTR)
  392.         )
  393.     (IF        (AND NEWSTR (/= NEWSTR "") (= 'INT (TYPE NEWSTR)))
  394.         (VL-REGISTRY-WRITE
  395.             (STRCAT "HKEY_CURRENT_USER\\LHBTOOLS\" KEY-PATH)
  396.             KEY-PATH
  397.             (ITOA NEWSTR)
  398.             )
  399.         )
  400.     (IF        NEWSTR
  401.         NEWSTR
  402.         SETSTR
  403.         )
  404.     )                                        ;DEFUN LHB-REGSAVE-INT


若不需要源程序,请下载编译文件。命令:GJ  。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-11-8 19:39:08 | 显示全部楼层
看起来好像真的很好玩似的,学习学习.

命令: APPLOAD 已成功加载 属性序号球GJ.lsp。
已成功加载 属性序号球GJ.lsp。
命令:
** 带属性序号球绘制, 命令: GJ . BY HB.Lee  2006-11-08. ***; 错误:
输入中的点位置不正确.
命令: gj 未知命令“GJ”。按 F1 查看帮助。

这是怎么一回事啊?没去想太多,只是把上面的代码复制到记事本然后另存为"GJ.lsp".
然后在CAD2004加载完了以后就这样子了~!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-8 21:40:11 | 显示全部楼层
看一下复制全了没,或下载编译文件试一试吧,我没碰到过这种问题!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-8 22:49:35 | 显示全部楼层
我出现二楼同样的问题
请楼主检查一下
另编译文件不能下载
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-11-8 23:28:46 | 显示全部楼层
大部分抄上面的呵呵!也有不同处请试试!
呵呵!奔驰三角星标志就不玩了啦!以实用至上!可以比你的好用哦!呵呵!
临时写的没写完善请指教!

  1. (defun c:test (/              *error*             blkatt
  2.                blkref              my:keypress    ps
  3.                set:xhq_n      xhq:keypress_b xhq:keypress_=
  4.                xhq:keypress_- xhq_n_str
  5.               )
  6.   (mak_layer)
  7.   (mak_layer2)
  8.   (mak_style)
  9.   (mak_block)
  10.   (setq        xhq_n          (if xhq_n
  11.                     (setq xhq_n (1+ xhq_n))
  12.                     1
  13.                   )
  14.         xhq_n_str (vl-princ-to-string xhq_n)
  15.   )
  16.   (while (not (setq ps (getpoint "\n请输入构件号引出点:"))))
  17.   (defun *error* (msg)
  18.     (entdel (entlast))
  19.     (entdel (entlast))
  20.     (princ msg)
  21.   )
  22.   (princ "\n[序号增一(+)/序号减一(-)/新序号(b)]:")
  23.   (defun set:xhq_n (/ tmp)
  24.     (setq tmp (getint "新的序号:"))
  25.     (if        tmp
  26.       (setq xhq_n     tmp
  27.             xhq_n_str (vl-princ-to-string xhq_n)
  28.       )
  29.     )
  30.     (princ "\n选项[序号增一(+)/序号减一(-)/新序号(b)]:")
  31.   )
  32.   (setq my:keypress "xhq")
  33.   (setq xhq:keypress_b set:xhq_n)
  34.   (defun xhq:keypress_=        ()
  35.     (setq xhq_n            (1+ xhq_n)
  36.           xhq_n_str (vl-princ-to-string xhq_n)
  37.     )
  38.   )
  39.   (defun xhq:keypress_-        ()
  40.     (setq xhq_n            (1- xhq_n)
  41.           xhq_n_str (vl-princ-to-string xhq_n)
  42.     )
  43.   )
  44.   (setq        blkref
  45.          (vla-InsertBlock
  46.            (vla-get-modelspace
  47.              (vla-get-ActiveDocument (vlax-get-acad-object))
  48.            )
  49.            (vlax-3d-point '(0 0 0))
  50.            "序号球"
  51.            1
  52.            1
  53.            1
  54.            0
  55.          )
  56.   )
  57.   (setq blkatt (car (vlax-invoke blkref 'GetAttributes)))
  58.   (defun mod_xhq (p1 p2 / dist k pp)
  59.     (cond
  60.       ((/= 0 (setq dist (distance p1 p2)))
  61.        (setq k (/ 2.5 dist))
  62.        (setq
  63.          pp (mapcar '- p2 (mapcar '* (mapcar '- p1 p2) (list k k k)))
  64.        )
  65.        (entmake        (list '(0 . "line")
  66.                       (cons 10 p1)
  67.                       (cons 11 p2)
  68.                       '(8 . "序号球")
  69.                 )
  70.        )
  71.        (vla-put-TextString blkatt xhq_n_str)
  72.        (vla-put-insertionpoint blkref (vlax-3d-point pp))
  73.       )
  74.     )
  75.   )
  76.   (fsxm:grread_drag
  77.     '(mod_xhq ps pt)
  78.     t
  79.   )
  80.   (c:test)
  81.   (princ)
  82. )
  83. (defun mak_style ()
  84.   (if (not (tblsearch "style" "num_style"))
  85.     (entmake (list
  86.                '(0 . "STYLE")
  87.                '(100 . "AcDbSymbolTableRecord")
  88.                '(100
  89.                  .
  90.                  "AcDbTextStyleTableRecord"
  91.                 )
  92.                '(2 . "NUM_STYLE")
  93.                '(70 . 0)
  94.                '(40 . 0.0)
  95.                '(41 . 0.7)
  96.                '(50 . 0.0)
  97.                '(71 . 0)
  98.                '(3 . "TSSDENG.shx")
  99.                '(4 . "HZTXT.shx")
  100.              )
  101.     )
  102.   )
  103. )
  104. (defun mak_layer ()
  105.   (if (not (tblsearch "layer" "序号球"))
  106.     (entmake (list
  107.                '(0 . "LAYER")
  108.                '(100
  109.                  .
  110.                  "AcDbSymbolTableRecord"
  111.                 )
  112.                '(100
  113.                  .
  114.                  "AcDbLayerTableRecord"
  115.                 )
  116.                '(6 . "continuous")
  117.                '(62 . 2)
  118.                '(70 . 0)
  119.                '(2 . "序号球")
  120.              )
  121.     )
  122.   )
  123. )
  124. (defun mak_layer2 ()
  125.   (if (not (tblsearch "layer" "序号"))
  126.     (entmake (list
  127.                '(0 . "LAYER")
  128.                '(100
  129.                  .
  130.                  "AcDbSymbolTableRecord"
  131.                 )
  132.                '(100
  133.                  .
  134.                  "AcDbLayerTableRecord"
  135.                 )
  136.                '(6 . "continuous")
  137.                '(62 . 6)
  138.                '(70 . 0)
  139.                '(2 . "序号")
  140.              )
  141.     )
  142.   )
  143. )
  144. (defun mak_block ()
  145.   (cond        ((not (tblsearch "block" "序号球"))
  146.          (entmake
  147.            (list '(0 . "BLOCK")
  148.                  '(2 . "序号球")
  149.                  '(10 0.0 0.0 0.0)
  150.                  '(70 . 2)
  151.            )
  152.          )
  153.          (entmake (list        '(0 . "CIRCLE")
  154.                         '(100
  155.                           .
  156.                           "AcDbEntity"
  157.                          )
  158.                         '(67 . 0)
  159.                         '(8 . "序号球")
  160.                         '(100 . "CIRCLE")
  161.                         '(10 0.0 0.0 0.0)
  162.                         '(40 . 2.5)
  163.                         '(210
  164.                           0.0
  165.                           0.0
  166.                           1.0
  167.                          )
  168.                   )
  169.          )
  170.          (entmake (list        '(0 . "ATTDEF")
  171.                         '(8 . "序号")
  172.                         '(10 0 0 0.0)
  173.                         '(40 . 3.5)
  174.                         '(1 . "A")
  175.                         '(41 . 0.7)
  176.                         '(7
  177.                           .
  178.                           "NUM_STYLE"
  179.                          )
  180.                         '(72 . 1)
  181.                         '(3
  182.                           .
  183.                           "编号属性"
  184.                          )
  185.                         '(2 . "A")
  186.                         '(70 . 0)
  187.                         '(74 . 2)
  188.                   )
  189.          )
  190.          (ENTMAKE '((0 . "ENDBLK")))
  191.         )
  192.   )
  193. )

grread_drag请下载
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-8 23:46:49 | 显示全部楼层
fsxm兄果然厉害,够精练,值得学习。^_^
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-10 02:46:15 | 显示全部楼层
[php]
试试着个:
(defun c:test ()
  (if sn (setq sn (1+ sn))(setq sn 1))
  (setq th (* (getvar "dimtxt")(getvar "dimscale")))
  (setq A (rtos (* (getvar "CDATE") 1E8)))
  (vl-cmdf "circle" '(0 0) th "")  
  (vl-cmdf "block" A '(0 0) (entlast) "")
  (vl-cmdf "insert" A '(0 0) "" "" "")
  (setq blk (entlast))
  (addatttoblock blk th "Value" '(0 0) "T1" sn)
  (setq ccobj (vlax-ename->vla-object (entlast)))
  (setq loop t)
  (prompt "\nPick Start Point:")
  (while loop
    (setq p (grread T))
    (setq k (car p)
          p (cadr p))
    (if        (= k 3)(setq loop nil))
    (vla-put-insertionpoint ccobj (vlax-3d-point p))
  )
  (setq nlist p loop t)
  (while loop
    (setq p1 (list (caddr (reverse nlist))(cadr (reverse nlist))(last nlist)))
    (setq p (grread T))
    (setq k (car p))
    (setq p (cadr p))
    (if (= k 3)(setq nlist (append nlist p)))
    (if (= k 25)(setq loop nil))
    (vla-put-insertionpoint ccobj (vlax-3d-point p))   
    (setq p2 (polar p (angle p p1) th))
    (if        (null leobj)
      (progn
        (command "leader" p1 p2 "" "" "n")
        (setq leobj (vlax-ename->vla-object (entlast)))
      )
    );if
    (prompt "\nPick Next Point:")
    (setq sl (vlax-make-safearray vlax-vbDouble (cons 0 (+ 2 (length nlist)))))
    (setq sa (vlax-safearray-fill sl (setq sa (append nlist p2))))
    (vla-put-coordinates leobj sa)
  );w
)
(defun addatttoblock (blk h prom ptatt tag v)      
  (setq doc (vla-get-activedocument (vlax-get-acad-object))
        obj (vlax-ename->vla-object blk)
      ptblk (vlax-safearray->list
            (vlax-variant-value (vla-get-insertionpoint obj)))
     blkdef (vla-item (vla-get-blocks doc)(vla-get-name obj)))
  (setq ptatt (vlax-3d-point (mapcar '- ptatt ptblk))
       attdef (vla-addattribute blkdef h acAttributeModeverify prom ptatt tag v))
  (vla-put-alignment attdef 10)
  (vla-put-textalignmentpoint attdef ptatt)
  (setq blkref (vla-insertblock
                 (if (or (= (getvar "TILEMODE") 1)(> (getvar "CVPORT") 1))
                   (vla-get-modelspace doc)
                   (vla-get-paperspace doc)
                 )
                 (vlax-3d-point ptblk)
                 (vla-get-name blkdef)
                 (vla-get-xscalefactor obj)(vla-get-yscalefactor obj)(vla-get-zscalefactor obj)
                 (vla-get-rotation obj)))
  (vla-delete obj)
  (princ)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2006-11-10 13:18:48 | 显示全部楼层
最初由 fsxm 发布
[B]大部分抄上面的呵呵!也有不同处请试试!
呵呵!奔驰三角星标志就不玩了啦!以实用至上!可以比你的好用哦!呵呵!
临时写的没写完善请指教!
[code]
(defun c:test (/              *error*             blkatt
               blkre... [/B]




命令: test
请输入构件号引出点:
[序号增一(+)/序号减一(-)/新序号(b)]:no function definition: FSXM:GRREAD_DRAG
命令:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-11-10 20:43:27 | 显示全部楼层
dwg001 老兄你好!请细看程序下面的一行字:“grread_drag请下载”
请在下面下载动态支持fsxm:grread_drag函数!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-10 22:14:41 | 显示全部楼层

序号球第二版,增加少许功能!

序号球第二版,增加少许功能!

1、支持序号球比例实时更改;
2、支持编号前缀;
3、支持编号加减;
4、保存数据改用Vl-ldata-**函数;

不支持一触即发功能!请各位指点!



  1. ;;属性序号球  BY HB.LEE 2006-11-10;
  2. (PRINC "\n*** 带属性序号球绘制, 命令: GJ . BY HB.Lee  2006-11-10. ***")
  3. (Defun C:GJ  (/  Actdoc  Addor  Attball Att_Bl Att_Gjh  Att_Pref
  4.                   Att_Str Def_Gjh  Firstpt  Gjbl Gj_Id  I  Insertpt  Mspace
  5.                   Oldcmd  Oldcurs  Oldlay  Oldos  Pref  Startpt Att_Addor
  6.                )
  7.     (Vl-Load-Com)
  8.     ;;错误处理函数
  9.     (Defun *$Myerror$*        (Msg)
  10.         (Redraw)
  11.         (Setvar "Osmode" Oldos)
  12.         (Setvar "Clayer" Oldlay)
  13.         (Setvar "Cursorsize" Oldcurs)
  14.         ;;确保出错时插入的块能删除
  15.         (If Attball (Vla-Delete Attball))
  16.         (Setvar "Cmdecho" Oldcmd)
  17.         (Setq *Error* &Olderr&)
  18.         (Princ "*取消*")
  19.         (Princ)
  20.         )
  21.     (Setq &Olderr& *Error*)
  22.     (Setq *Error* *$Myerror$*)
  23.     (Setq Actdoc (Vla-Get-Activedocument (Vlax-Get-Acad-Object)))
  24.     (Setq Mspace (Vla-Get-Modelspace Actdoc))
  25.     (Setq Oldlay (Getvar "Clayer"))
  26.     (Setq Oldos (Getvar "Osmode"))
  27.     (Setq Oldcmd (Getvar "Cmdecho"))
  28.     (Setq Oldcurs (Getvar "Cursorsize"))
  29.     (Setvar "Cmdecho" 0)
  30.     (Vla-Startundomark Actdoc)
  31.     (Setq Gj_Id T)
  32.     ;;捕捉方式设定
  33.     (Setvar "Osmode" (+ 1 2 32 128 512))
  34.     (While Gj_Id
  35.         (Initget 128 "P C S B")
  36.         ;;设置初始比例
  37.         (Setq Gjbl (Vlax-Ldata-Get "Attball" "Gjbl"))
  38.         (If (Not Gjbl) (Setq Gjbl (Rtos (Getvar "Dimscale") 2 2)))
  39.         ;;设置编号前缀
  40.         (Setq Pref (Vlax-Ldata-Get "Attball" "Prefix"))
  41.         (If (OR (= "" Pref) (= NIL Pref))
  42.             (Progn (Setq Pref "") (Princ "\n当前编号无前缀!"))
  43.             (Princ (Strcat "\n当前编号前缀:" Pref))
  44.             )
  45.         ;;设置序号递增或递减,默认递增
  46.         (Setq Addor (Vlax-Ldata-Get "Attball" "Addor"))
  47.         (If (AND ADDOR (= Addor "N"))
  48.           (Princ "   序号递减!")
  49.           (PROGN (Princ "   序号递增!") (SETQ Addor "Y"))
  50.         )
  51.         (Setq Att_Addor Addor)
  52.         ;;改变序号
  53.         (Setq Def_Gjh (Vlax-Ldata-Get "Attball" "Gjh_N"))
  54.         (If (Not Def_Gjh) (Setq Def_Gjh "1"))

  55.         ;;设置默认字符串
  56.         (Setq Att_Str (Strcat Pref Def_Gjh))
  57.         (Setq Att_Gjh Def_Gjh)
  58.         (Setq Att_Bl (Atof Gjbl))
  59.         (Setq Att_Pref Pref)
  60.         (Setq Startpt
  61.                  (Getpoint
  62.                      (Strcat
  63.                          "\n输入构件号引出点或[改绘图比例(S)/改编号前缀(P)/递增或递减(C)/改当前序号(B)]<"
  64.                          Att_Str
  65.                          ">:"
  66.                          )
  67.                      )
  68.               )
  69.         (Cond
  70.             ;;设置初始比例
  71.             ((Or (= Startpt "S") (= Startpt "s"))
  72.              (Setq Att_Bl (Getreal (Strcat "\n请输入新的绘图比例<" Gjbl ">:")))
  73.              (If (Not Att_Bl) (Setq Att_Bl (Atof Gjbl)))
  74.              (Vlax-Ldata-Put "Attball" "Gjbl" (Rtos Att_Bl 2 2))
  75.              )
  76.             ;;设置编号前缀
  77.             ((Or (= Startpt "P") (= Startpt "p"))
  78.              (IF (= "" PREF)
  79.                (Setq Att_Pref (Getstring (Strcat "\n若需前缀,请输入编号前缀:")))
  80.                (Setq Att_Pref (Getstring (Strcat "\n若需前缀,请输入编号前缀<" Pref ">:")))
  81.              )
  82.              (If (Not Att_Pref) (Setq Att_Pref Nil))
  83.              (Vlax-Ldata-Put "Attball" "Prefix" Att_Pref)
  84.              )
  85.             ;;设置序号递增或递减,默认递增
  86.             ((Or (= Startpt "C") (= Startpt "c"))
  87.              (Setq Att_Addor (Getstring (Strcat "\n序号是否按顺序递增<" Addor ">:")))
  88.              (If (/= (Strcase Att_Addor) "N") (Setq Att_Addor "Y"))
  89.              (Vlax-Ldata-Put "Attball" "Addor" (Strcase Att_Addor))
  90.              )

  91.             ;;改当前序号
  92.             ((Or (= Startpt "B") (= Startpt "b"))
  93.              (Setq Att_Gjh
  94.                       (Getint
  95.                           (Strcat "\n请输入新的序号[当前默认序号<" Def_Gjh ">]:")
  96.                           )
  97.                    )
  98.              (Vlax-Ldata-Put "Attball" "Gjh_N" (Itoa Att_Gjh))
  99.              (If (Not Att_Gjh)
  100.                  (Setq Att_Str (Strcat Pref Def_Gjh))
  101.                  (Setq Att_Str (Strcat Pref (Itoa Att_Gjh)))
  102.                  )
  103.              )
  104.             ;;得到坐标,设置插入点
  105.             ((= (Type Startpt) 'List)
  106.              (If (Null (Tblobjname "Block" (Strcat "Lhb_No_" Att_Pref)))
  107.                 (Progn
  108.                   (Entmake_Att 2.5 Att_Str Att_Pref)
  109.                   (Entdel (Entlast))
  110.                 )
  111.              )
  112.              (Setq Insertpt (Vlax-3d-Point (Polar Startpt 0 (* Att_Bl 2.5))))
  113.              (Setq Attball (Vla-Insertblock Mspace Insertpt (Strcat "Lhb_No_" Att_Pref)
  114.                              Att_Bl
  115.                              Att_Bl
  116.                              1
  117.                              0
  118.                            )
  119.              )
  120.              (Foreach I (Vlax-Safearray->List
  121.                           (Vlax-Variant-Value
  122.                             (Vla-Getattributes Attball)
  123.                           )
  124.                         )
  125.                (Vla-Put-Textstring I Att_Str) ;属性值
  126.                (Vla-Put-Tagstring I Att_Str) ;标签
  127.                (If (> (Strlen Att_Str) 2) (Vla-Put-Scalefactor I 0.5)
  128.                )
  129.              )
  130.              ;;动态预览
  131.              (View_Gj Attball Startpt Att_Bl)
  132.              (Setq Attball Nil)
  133.              ;;序号递增或递减
  134.              (If (/= (Strcase Att_Addor) "N")
  135.                  (Progn
  136.                      (Setq Def_Gjh (Itoa (1+ (Atoi Def_Gjh))))
  137.                      (Vlax-Ldata-Put "Attball" "Gjh_N" Def_Gjh)
  138.                      )
  139.                  (Progn
  140.                      (Setq Def_Gjh (Itoa (1- (Atoi Def_Gjh))))
  141.                      (If (< (Atoi Def_Gjh) 0)
  142.                          (Progn        (Setq Def_Gjh "0")
  143.                                 (Princ "\n***  编号不能为负数!  ***")
  144.                                 )
  145.                          )
  146.                      (Vlax-Ldata-Put "Attball" "Gjh_N" Def_Gjh)
  147.                      )
  148.                  ); END IF
  149.              )                        ; End TYPE
  150.              ;;动态预览
  151.              (View_Gj Attball Startpt Att_Bl)
  152.              (Setq Attball Nil)
  153.              ;;序号递增或递减
  154.              (If (/= (Strcase Att_Addor) "N")
  155.                  (Progn
  156.                      (Setq Def_Gjh (Itoa (1+ (Atoi Def_Gjh))))
  157.                      (Vlax-Ldata-Put "Attball" "Gjh_N" Def_Gjh)
  158.                      )
  159.                  (Progn
  160.                      (Setq Def_Gjh (Itoa (1- (Atoi Def_Gjh))))
  161.                      (If (< (Atoi Def_Gjh) 0)
  162.                          (Progn        (Setq Def_Gjh "0")
  163.                                 (Princ "\n***  编号不能为负数!  ***")
  164.                                 )
  165.                          )
  166.                      (Vlax-Ldata-Put "Attball" "Gjh_N" Def_Gjh)
  167.                      )
  168.              )                                ;End Type
  169.             (T (Setq Gj_Id Nil) (PRINC "\n无效的选择或者输入!请重新确认."))
  170.             )
  171.         )
  172.     (Setvar "Clayer" Oldlay)
  173.     (Setvar "Cursorsize" Oldcurs)
  174.     (Vla-Endundomark Actdoc)
  175.     (Setvar "Osmode" Oldos)
  176.     (Setvar "Cmdecho" Oldcmd)
  177.     (Setq *Error* &Olderr&)
  178.     (Princ)
  179.     )

  180. ;;;构件编号动态预览
  181. (DEFUN VIEW_GJ        (VOBJ         VBASEPT VBL         /         DIST         FIRSTPT
  182.                  LOOP_ID NEWCENPT         PT1         PT10         PT11
  183.                  PT12         PT2         PT3         PT4         PT5         PT6
  184.                  PT7         PT8         PT9         VANGLE         VPOINT         VPOINTENT
  185.                  MOVEPT)
  186.     (SETQ LOOP_ID T)
  187.     (SETQ ALPHA 0)
  188.     (SETVAR "CURSORSIZE" 1)                ;将光标大小设置为1,最小尺寸
  189.     (PRINC "\n请输入构件号标注点:")
  190.     (WHILE LOOP_ID
  191.         (SETQ VPOINTENT (GRREAD T 4 1))
  192.         (IF (= 5 (CAR VPOINTENT))        ;鼠标跟踪
  193.             (PROGN
  194.                 (REDRAW)
  195.                 (SETQ VPOINT (CADR VPOINTENT))
  196.                 (SETQ MOVEPT VPOINT)        ;记录直线第二点
  197.                 (SETQ DIST (DISTANCE VBASEPT VPOINT))
  198.                 (SETQ VANGLE (ANGLE VBASEPT VPOINT))
  199.                 (SETQ NEWCENPT (POLAR VBASEPT VANGLE (+ DIST (* VBL 2.5))))
  200.                 (SETQ FIRSTPT (Vlax-3d-Point NEWCENPT))
  201.                 (VLA-PUT-INSERTIONPOINT VOBJ FIRSTPT)
  202.                 (GRVECS (LIST 2 VBASEPT VPOINT))
  203.                 ;;================================================================
  204.                 ;;动态旋转“奔驰”标志,此段可去掉,纯属好玩。
  205.                 ;;标注点标志
  206.                 (SETQ PT1 (POLAR VPOINT (+ ALPHA (* PI 0.5)) (* VBL 1.0))
  207.                       PT2 (POLAR VPOINT (+ ALPHA (/ (* PI 7) 6)) (* VBL 1.0))
  208.                       PT3 (POLAR VPOINT (+ ALPHA (/ (* PI 11) 6)) (* VBL 1.0))
  209.                       PT4 (POLAR VPOINT (+ ALPHA (/ (* PI 5) 6)) (* VBL 0.268))
  210.                       PT5 (POLAR VPOINT (+ ALPHA (* PI 1.5)) (* VBL 0.268))
  211.                       PT6 (POLAR VPOINT (+ ALPHA (/ PI 6)) (* VBL 0.268))
  212.                       )
  213.                 (GRVECS        (LIST 1            PT1          VPOINT      1            PT2          VPOINT
  214.                               1            PT3          VPOINT      6            PT4          VPOINT
  215.                               6            PT5          VPOINT      6            PT6          VPOINT
  216.                               6            PT1          PT4        6     PT4   PT2          6
  217.                               PT2   PT5          6        PT5   PT3   6          PT3
  218.                               PT6   6          PT6        PT1)
  219.                         )
  220.                 ;;引出点标志
  221.                 (SETQ PT7  (POLAR VBASEPT (+ ALPHA (* PI 0.5)) (* VBL 1.0))
  222.                       PT8  (POLAR VBASEPT (+ ALPHA (/ (* PI 7) 6)) (* VBL 1.0))
  223.                       PT9  (POLAR VBASEPT (+ ALPHA (/ (* PI 11) 6)) (* VBL 1.0))
  224.                       PT10 (POLAR VBASEPT (+ ALPHA (/ (* PI 5) 6)) (* VBL 0.268))
  225.                       PT11 (POLAR VBASEPT (+ ALPHA (* PI 1.5)) (* VBL 0.268))
  226.                       PT12 (POLAR VBASEPT (+ ALPHA (/ PI 6)) (* VBL 0.268))
  227.                       )
  228.                 (GRVECS        (LIST 1             PT7    VBASEPT          1         PT8
  229.                               VBASEPT            1           PT9          VBASEPT
  230.                               5             PT10   VBASEPT          5         PT11
  231.                               VBASEPT            5           PT12          VBASEPT
  232.                               5             PT7    PT10   5          PT10         PT8
  233.                               5             PT8    PT11   5          PT11         PT9
  234.                               5             PT9    PT12   5          PT12         PT7)
  235.                         )
  236.                 ;;设置三角星旋转速度,若想加快可将0.056适当加大,如0.112.
  237.                 (SETQ ALPHA (+ ALPHA (* PI 0.084)))
  238.                 ;;================================================================
  239.                 )
  240.             )
  241.         ;; 若点击鼠标左、右键或键盘任意按键,则取得当前鼠标位置,并绘制符号
  242.         (IF (OR        (= 3 (CAR VPOINTENT))
  243.                 (= 2 (CAR VPOINTENT))
  244.                 (= 11 (CAR VPOINTENT))
  245.                 )
  246.             (PROGN
  247.                 (REDRAW)
  248.                 (SETQ LOOP_ID NIL)
  249.                 ;;绘制直线
  250.                 (SETVAR "CLAYER" "构件符号")
  251.                 (SETQ STARTPT (Vlax-3d-Point VBASEPT))
  252.                 (SETQ ENDPT (Vlax-3d-Point MOVEPT))
  253.                 (VLA-ADDLINE MSPACE STARTPT ENDPT)
  254.                 )
  255.             )
  256.         )                                ;END WHILE
  257.     (SETVAR "CURSORSIZE" OLDCURS)
  258.     (PRINC)
  259.     )                                        ;DEFUN VIEW_GJ

  260. ;;建立属性编号
  261. (DEFUN ENTMAKE_ATT  (CIRRAD TEXT PREFIX / CHK_LAYER CHK_STYLE BLKNAME BLKN LST0
  262.                      LST1)
  263.     ;;建立编号圆圈图层
  264.     (SETQ CHK_LAYER (TBLSEARCH "LAYER" "构件符号"))
  265.     (IF        (= CHK_LAYER NIL)
  266.         (PROGN
  267.             (ENTMAKE (LIST
  268.                          '(0 . "LAYER")
  269.                          '(100 . "AcDbSymbolTableRecord")
  270.                          '(100 . "AcDbLayerTableRecord")
  271.                          '(6 . "continuous") ;线型
  272.                          '(62 . 2)        ;颜色
  273.                          '(70 . 0)        ;图层状态
  274.                          (CONS 2 "构件符号") ;图层名
  275.                          )
  276.                      )
  277.             )
  278.         )

  279.     ;;建立编号文字图层
  280.     (SETQ CHK_LAYER (TBLSEARCH "LAYER" "构件编号"))
  281.     (IF        (= CHK_LAYER NIL)
  282.         (PROGN
  283.             (ENTMAKE (LIST
  284.                          '(0 . "LAYER")
  285.                          '(100
  286.                            .
  287.                            "AcDbSymbolTableRecord")
  288.                          '(100 . "AcDbLayerTableRecord")
  289.                          '(6 . "continuous") ;线型
  290.                          '(62 . 6)        ;颜色
  291.                          '(70 . 0)        ;图层状态
  292.                          '(2 . "构件编号") ;图层名
  293.                          )
  294.                      )
  295.             )
  296.         )

  297.     ;;建立编号文字字型
  298.     (SETQ CHK_STYLE (TBLSEARCH "STYLE" "NUM_STYLE"))
  299.     (IF        (= CHK_STYLE NIL)
  300.         (ENTMAKE (LIST
  301.                      '(0 . "STYLE")        ;对象名称
  302.                      '(100 . "AcDbSymbolTableRecord")
  303.                      '(100
  304.                        .
  305.                        "AcDbTextStyleTableRecord") ;子类标记
  306.                      '(2 . "NUM_STYLE")        ;字体样式名
  307.                      '(70 . 0)                ;标注位码
  308.                      '(40 . 0.0)        ;文字高度
  309.                      '(41 . 0.7)        ;宽度系数
  310.                      '(50 . 0.0)        ;字斜角
  311.                      '(71 . 0)                ;文字生成标注位码2=反向,4=颠倒
  312.                      '(3 . "TSSDENG.shx") ;西文字体名
  313.                      '(4 . "HZTXT.shx")        ;中文字体名
  314.                      ) ;_ 结束LIST
  315.                  ) ;_ 结束ENTMAKE
  316.         ) ;_ 结束IF
  317.    
  318.     ;;设置属性块名
  319.     (SETQ BLKNAME (Strcat "Lhb_No_" PREFIX))

  320.     (ENTMAKE
  321.         (LIST '(0 . "BLOCK")
  322.               (CONS 2 BLKNAME)                ;图块名称
  323.               '(70 . 2)                        ;设置属性块是否可以编辑
  324.               '(10 0.0 0.0 0.0))        ;基准点
  325.         )
  326.     (ENTMAKE (LIST '(0 . "CIRCLE")
  327.                    '(100 . "AcDbEntity")
  328.                    '(67 . 0)
  329.                    '(8 . "构件符号")        ;图层名称
  330.                    '(100 . "CIRCLE")
  331.                    '(10 0.0 0.0 0.0)        ;中心点
  332.                    (CONS 40 CIRRAD)        ;半径
  333.                    '(210 0.0 0.0 1.0)
  334.                    )
  335.              )
  336.     (ENTMAKE (LIST '(0 . "ATTDEF")
  337.                    '(100 . "AcDbEntity")
  338.                    '(67 . 0)
  339.                    '(8 . "构件编号")        ;图层名称
  340.                    '(100 . "AcDbText")
  341.                    '(10 -1.08 -1.75 0.0) ;文字起点
  342.                    (CONS 40 (+ CIRRAD 1.0)) ;文字高度
  343.                    '(1 . "A")                ;默认值
  344.                    '(50 . 0)                ;文字旋转
  345.                    '(41 . 0.7)                ;相对X比例系数
  346.                    '(51 . 0.0)                ;倾斜角度
  347.                    '(7 . "NUM_STYLE")        ;文字字型
  348.                    '(71 . 0)                ;文字产生的标志
  349.                    '(72 . 1)                ;水平文字的对齐类型
  350.                    '(11 0.0 0.0 0.0)        ;对齐点,只有在72与74非0才有意义
  351.                    '(210 0.0 0.0 1.0)        ;挤出方向
  352.                    '(100 . "AcDbAttributeDefinition")
  353.                    '(3 . "编号属性")        ;提示字符串
  354.                    '(2 . "A")                ;卷标字符串
  355.                    '(70 . 0)                ;属性标志
  356.                    '(73 . 0)                ;字段长度
  357.                    '(74 . 2)                ;垂直文字的对齐类型
  358.                    )
  359.              )
  360.     (SETQ BLKN (ENTMAKE '((0 . "ENDBLK"))))
  361.     (SETQ LST0 (LIST '(0 . "INSERT") '(100 . "AcDbEntity") '(67 . 0)
  362.                      '(8 . "构件符号")        ;图层
  363.                      '(100 . "AcDbBlockReference") '(66 . 1) '(10 0.0 0.0 0.0)
  364.                                         ;插入点
  365.                      '(41 . 1.0)        ;x
  366.                      '(42 . 1.0)        ;y
  367.                      '(43 . 1.0)        ;z
  368.                      '(50 . 0.0)        ;旋转角度
  369.                      '(70 . 0)                ;插入行数
  370.                      '(71 . 0)                ;插入列数
  371.                      '(44 . 0.0)        ;行间距
  372.                      '(45 . 0.0)        ;列间距
  373.                      '(210 0.0 0.0 1.0))
  374.           )
  375.     (SETQ LST1 (APPEND LST0 (LIST (CONS 2 BLKN))))
  376.     (ENTMAKE LST1)
  377.     (ENTMAKE (LIST '(0 . "ATTRIB")
  378.                    '(5 . "26")
  379.                    '(100 . "AcDbEntity")
  380.                    '(67 . 0)
  381.                    '(8 . "构件编号")        ;图层名称
  382.                    '(100 . "AcDbText")
  383.                    '(10 -1.08 -1.75 0.0) ;文字起点
  384.                    (CONS 40 (+ CIRRAD 1.0)) ;文字高度
  385.                    (CONS 1 TEXT)        ;默认值
  386.                    '(50 . 0)                ;文字旋转
  387.                    '(41 . 0.7)                ;相对X比例系数
  388.                    '(51 . 0.0)                ;倾斜角度
  389.                    '(7 . "NUM_STYLE")        ;文字字型
  390.                    '(71 . 0)                ;文字产生的标志
  391.                    '(72 . 1)                ;水平文字的对齐类型
  392.                    '(11 0.0 0.0 0.0)        ;对齐点,只有在72与74非0才有意义
  393.                    '(210 0.0 0.0 1.0)        ;挤出方向
  394.                    '(100 . "AcDbAttribute")
  395.                    (CONS 2 TEXT)        ;卷标字符串
  396.                    '(70 . 0)                ;属性标志
  397.                    '(73 . 0)                ;字段长度
  398.                    '(74 . 2)                ;垂直文字的对齐类型
  399.                    )
  400.              )
  401.     (ENTMAKE '((0 . "SEQEND")))
  402.     (PRINC)
  403.     )



不要源码的下载编译文件!命令:GJ .
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-16 14:34:16 | 显示全部楼层
这个在别的地方已经有过了,楼主你是不是有什么改动没有啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-24 13:47:16 | 显示全部楼层
附件无法下载,请检查
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-14 21:41:47 | 显示全部楼层
Dallas_whu  大侠,之前的动态标高已经是精品,这个程序又是经典.非常感谢.

能否将初始比例设为100或者150呢,这样更符合画图实际应用.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-14 22:44:14 | 显示全部楼层
源码都有了,自己改吧。
将下面代码中,(If (Not Gjbl) (Setq Gjbl (Rtos (Getvar "Dimscale") 2 2)))
改为 (If (Not Gjbl) (Setq Gjbl 100)) 或(If (Not Gjbl) (Setq Gjbl 150))
即可。
=============================
;;设置初始比例
        (Setq Gjbl (Vlax-Ldata-Get "Attball" "Gjbl"))
        (If (Not Gjbl) (Setq Gjbl (Rtos (Getvar "Dimscale") 2 2)))
=============================
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-15 09:34:17 | 显示全部楼层
最初由 Dallas_whu 发布
[B]源码都有了,自己改吧。
将下面代码中,(If (Not Gjbl) (Setq Gjbl (Rtos (Getvar "Dimscale") 2 2)))
改为 (If (Not Gjbl) (Setq Gjbl 100)) 或(If (Not Gjbl) (Setq Gjbl 150))
即可。
==========?.. [/B]

Dallas_whu 大侠,不行啊!运行不了了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 04:09 , Processed in 0.340295 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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