明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 980|回复: 4

[讨论] 数字圆圈属性块,求助!

[复制链接]
发表于 2024-4-26 09:09:09 | 显示全部楼层 |阅读模式
报错:指定圆心位置: DXF 组不正确: (1 . 1),求助高手帮忙稍作修改!
  1. ;;==============圆圈数字属性块=================
  2. (defun c:tt3(/ sc zr a b pt name)
  3.         (if (= sc nil) (setq sc 1))
  4.         (setq a (getreal (strcat "\n请输入图框比例<" (rtos sc) ">: ")))
  5.         (if (= a nil)
  6.           (progn
  7.             (setq a sc)
  8.             (setq bj (* a 2.5))    ;设置圆圈半径
  9.             (setq zg (* a 3.0))    ;设置字高
  10.           )
  11.           (progn  
  12.             (setq bj (* a 2.5))    ;设置圆圈半径
  13.             (setq zg (* a 3.0))    ;设置字高
  14.             (setq sc a)
  15.           )
  16.         )
  17.         
  18.         (if (= zr nil) (setq zr 1))
  19.         (setq b (getint (strcat "\n请输入圆中数字<" (rtos zr) ">: ")))
  20.         (if (= b nil) (setq b zr) (setq zr b))
  21.          
  22.         (while (setq pt (getpoint "\n指定圆心位置: "))
  23.                 (setq name (getvar "clayer"))        ;记录当前图层名
  24.                
  25.                 (entmake (list '(0 . "BLOCK")        ;对象类型:块
  26.                 '(70 . 2)                            ;组码70:设置属性块是否可以编辑
  27.                 '(10 0.0 0.0 0.0)                    ;组码10:设置基准点
  28.                 (cons 2 name))                       ;组码2:块名为图层名
  29.                 )
  30.                
  31.                 (entmake (list '(0 . "CIRCLE")       ;对象类型:圆
  32.                 '(10 0.0 0.0 0.0)                    ;组码10:设置圆的中心点
  33.                 (cons 40 bj)                         ;组码40:设置圆的半径
  34.                 '(370 . 10))                         ;组码370:设置圆的线宽
  35.                 )
  36.                
  37.                 (entmake '((0 . "ENDBLK"))           ;图元类型:ENDBLK
  38.                 )
  39.                
  40.                 (entmake (list '(0 . "INSERT")       ;对象类型:插入点
  41.                 '(66 . 1)                            ;可变属性跟随标志(可选;默认值 = 0);如果属性跟随标志的值为 1,则跟随插入的将是一系列属性图元,并以一个 SEQEND 图元终止
  42.                 (cons 2 name)                        ;块名
  43.                 (cons 10 pt))                        ;插入点
  44.                 )
  45.                
  46.                 (entmake (list '(0 . "ATTRIB")       ;对象类型:属性
  47.                 '(100 . "AcDbEntity")
  48.                 '(100 . "AcDbText")
  49.                 (cons 10 pt)                         ;组码10:文字起点
  50.                 (cons 11 pt)                         ;组码10:对齐点
  51.                 (cons 40 zg)                         ;组码40:文字高度
  52.                 (cons 1 b)                           ;组码1:值(圆中数字)
  53.                 '(71 . 0)                            ;组码71:文字生成标志(默认值=0)
  54.                 '(72 . 1)                            ;组码72:文字水平对齐类型(0=左对正;1=居中对正;2=右对正;3=对齐(如果垂直对齐=0);4=中间(如果垂直对齐=0);5=拟合(如果垂直对齐=0))
  55.                 '(100 . "AcDbAttribute")
  56.                 '(2 . "A")                           ;组码2:属性标记字符串
  57.                 '(70 . 0)                            ;组码70:属性标志(1=属性不可见(不出现);2=固定属性;4=输入属性时要求进行验证;8=属性为预置(插入时无提示))
  58.                 '(41 . 0.7)                          ;组码41:文字宽度比例
  59.                 '(73 . 2)                            ;组码73:字段长度(默认值=0)
  60.                 '(74 . 2))                           ;组码74:文字垂直对齐类型(0=基线对正;1=底端对正;2=居中对正;3=顶端对正)
  61.                 )
  62.                
  63.                 (entmake '((0 . "SEQEND")))
  64.                 (setq b (1+ b))
  65.         )
  66.         (princ)
  67. )


发表于 2024-4-26 09:45:17 | 显示全部楼层
本帖最后由 yshf 于 2024-4-26 09:46 编辑

; ;; 修改为
; ;; =============圆圈数字属性块=================
(defun c:tt3(/ sc zr a b pt name)
        (if (= sc nil) (setq sc 1))
        (setq a (getreal (strcat "\n请输入图框比例<" (rtos sc) ">: ")))
        (if (= a nil)
          (progn
            (setq a sc)
            (setq bj (* a 2.5))    ;设置圆圈半径
            (setq zg (* a 3.0))    ;设置字高
          )
          (progn  
            (setq bj (* a 2.5))    ;设置圆圈半径
            (setq zg (* a 3.0))    ;设置字高
            (setq sc a)
          )
        )
        
        (if (= zr nil) (setq zr 1))
        (setq b (getint (strcat "\n请输入圆中数字<" (rtos zr) ">: ")))
        (if (= b nil) (setq b zr) (setq zr b))
         
        (while (setq pt (getpoint "\n指定圆心位置: "))
                (setq name (getvar "clayer"))        ;记录当前图层名

                ; ;; 块是否存在判断
                (if (not (tblsearch "block" name))
                    (progn
                        (entmake (list '(0 . "BLOCK")        ;对象类型:块
                                       '(70 . 2)             ;组码70:设置属性块是否可以编辑
                                       '(10 0.0 0.0 0.0)     ;组码10:设置基准点
                                        (cons 2 name)        ;组码2:块名为图层名
                                 )
                                                     
                        )
               
                        (entmake (list '(0 . "CIRCLE")       ;对象类型:圆
                                       '(10 0.0 0.0 0.0)     ;组码10:设置圆的中心点
                                        (cons 40 bj)         ;组码40:设置圆的半径
                                       '(370 . 10))          ;组码370:设置圆的线宽
                        )
               
                        (entmake '((0 . "ENDBLK")))          ;图元类型:ENDBLK
                    )
                )
               
                (entmake (list '(0 . "INSERT")       ;对象类型:插入点
                               '(66 . 1)             ;可变属性跟随标志(可选;默认值 = 0);如果属性跟随标志的值为 1,则跟随插入的将是一系列属性图元,并以一个 SEQEND 图元终止
                                (cons 2 name)        ;块名
                                (cons 10 pt)         ;插入点
                               '(41 . 1.0)
                               '(42 . 1.0)
                               '(42 . 1.0)
                         )                        
                )
               
                (entmake (list '(0 . "ATTRIB")       ;对象类型:属性
                               '(100 . "AcDbEntity")
                               '(100 . "AcDbText")
                                (cons 10 pt)                         ;组码10:文字起点
                               ;(cons 11 pt)                         ;组码10:对齐点
                                (cons 40 zg)                         ;组码40:文字高度
                                (cons 1 (itoa b))                          ;组码1:值(圆中数字)
                               '(41 . 0.7)                           ;组码41:文字宽度比例
                              
                               '(50 . 0.0)
                               '(51 . 0.0)
                               '(71 . 0)                            ;组码71:文字生成标志(默认值=0)
                               '(72 . 1)                            ;组码72:文字水平对齐类型(0=左对正;1=居中对正;2=右对正;3=对齐(如果垂直对齐=0);4=中间(如果垂直对齐=0);5=拟合(如果垂直对齐=0))
                                (cons 11 pt)                         ;组码10:对齐点               
                               '(100 . "AcDbAttribute")
                               '(2 . "A")                           ;组码2:属性标记字符串
                               '(70 . 0)                            ;组码70:属性标志(1=属性不可见(不出现);2=固定属性;4=输入属性时要求进行验证;8=属性为预置(插入时无提示))
                               '(73 . 2)                            ;组码73:字段长度(默认值=0)
                               '(74 . 2))                           ;组码74:文字垂直对齐类型(0=基线对正;1=底端对正;2=居中对正;3=顶端对正)
                )

                (entmake '((0 . "SEQEND")))
         
                (setq b (1+ b))
        )
        (princ)
)
发表于 2024-4-26 10:06:39 | 显示全部楼层
本帖最后由 yshf 于 2024-4-26 10:08 编辑

; ;; 或者改为如下较好
; ;; ==============圆圈数字属性块=================
(defun c:tt3(/ sc zr a b pt name)
        (defun EntamkeBlock(name)
            (if (not (tblsearch "block" name))
                (progn
                    (entmake (list '(0 . "BLOCK")        ;对象类型:块
                                   '(70 . 2)             ;组码70:设置属性块是否可以编辑
                                   '(10 0.0 0.0 0.0)     ;组码10:设置基准点
                                    (cons 2 name)        ;组码2:块名为图层名
                                 )
                                                     
                    )
               
                    (entmake (list '(0 . "CIRCLE")       ;对象类型:圆
                                   '(10 0.0 0.0 0.0)     ;组码10:设置圆的中心点
                                    (cons 40 bj)         ;组码40:设置圆的半径
                                   '(370 . 10))          ;组码370:设置圆的线宽
                    )
               
                    (entmake '((0 . "ENDBLK")))          ;图元类型:ENDBLK
                )
            )
        )
        (if (= sc nil) (setq sc 1))
        (setq a (getreal (strcat "\n请输入图框比例<" (rtos sc) ">: ")))
        (if (= a nil)
          (progn
            (setq a sc)
            (setq bj (* a 2.5))    ;设置圆圈半径
            (setq zg (* a 3.0))    ;设置字高
          )
          (progn  
            (setq bj (* a 2.5))    ;设置圆圈半径
            (setq zg (* a 3.0))    ;设置字高
            (setq sc a)
          )
        )
        
        (if (= zr nil) (setq zr 1))
        (setq b (getint (strcat "\n请输入圆中数字<" (rtos zr) ">: ")))
        (if (= b nil) (setq b zr) (setq zr b))

        (EntamkeBlock (setq name (getvar "clayer")))
  
        (while (setq pt (getpoint "\n指定圆心位置: "))
                       
               
                (entmake (list '(0 . "INSERT")       ;对象类型:插入点
                               '(66 . 1)             ;可变属性跟随标志(可选;默认值 = 0);如果属性跟随标志的值为 1,则跟随插入的将是一系列属性图元,并以一个 SEQEND 图元终止
                                (cons 2 name)        ;块名
                                (cons 10 pt)         ;插入点
                               '(41 . 1.0)
                               '(42 . 1.0)
                               '(42 . 1.0)
                         )                        
                )
               
                (entmake (list '(0 . "ATTRIB")       ;对象类型:属性
                               '(100 . "AcDbEntity")
                               '(100 . "AcDbText")
                                (cons 10 pt)                         ;组码10:文字起点
                               ;(cons 11 pt)                         ;组码10:对齐点
                                (cons 40 zg)                         ;组码40:文字高度
                                (cons 1 (itoa b))                          ;组码1:值(圆中数字)
                               '(41 . 0.7)                           ;组码41:文字宽度比例
                              
                               '(50 . 0.0)
                               '(51 . 0.0)
                               '(71 . 0)                            ;组码71:文字生成标志(默认值=0)
                               '(72 . 1)                            ;组码72:文字水平对齐类型(0=左对正;1=居中对正;2=右对正;3=对齐(如果垂直对齐=0);4=中间(如果垂直对齐=0);5=拟合(如果垂直对齐=0))
                                (cons 11 pt)                         ;组码10:对齐点               
                               '(100 . "AcDbAttribute")
                               '(2 . "A")                           ;组码2:属性标记字符串
                               '(70 . 0)                            ;组码70:属性标志(1=属性不可见(不出现);2=固定属性;4=输入属性时要求进行验证;8=属性为预置(插入时无提示))
                               '(73 . 2)                            ;组码73:字段长度(默认值=0)
                               '(74 . 2))                           ;组码74:文字垂直对齐类型(0=基线对正;1=底端对正;2=居中对正;3=顶端对正)
                )

                (entmake '((0 . "SEQEND")))
         
                (setq b (1+ b))
        )
        (princ)
)
 楼主| 发表于 2024-4-26 10:18:20 | 显示全部楼层
yshf 发表于 2024-4-26 10:06
; ;; 或者改为如下较好
; ;; ==============圆圈数字属性块=================
(defun c:tt3(/ sc zr a b  ...

非常感谢出手帮忙!!!
发表于 2024-4-27 21:49:45 | 显示全部楼层
很好用,虽然一般用不到!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 18:19 , Processed in 0.172464 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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