huxu823 发表于 2024-4-26 09:09:09

数字圆圈属性块,求助!

报错:指定圆心位置: DXF 组不正确: (1 . 1),求助高手帮忙稍作修改!
;;==============圆圈数字属性块=================
(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"))      ;记录当前图层名
               
                (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))                        ;插入点
                )
               
                (entmake (list '(0 . "ATTRIB")       ;对象类型:属性
                '(100 . "AcDbEntity")
                '(100 . "AcDbText")
                (cons 10 pt)                         ;组码10:文字起点
                (cons 11 pt)                         ;组码10:对齐点
                (cons 40 zg)                         ;组码40:文字高度
                (cons 1 b)                           ;组码1:值(圆中数字)
                '(71 . 0)                            ;组码71:文字生成标志(默认值=0)
                '(72 . 1)                            ;组码72:文字水平对齐类型(0=左对正;1=居中对正;2=右对正;3=对齐(如果垂直对齐=0);4=中间(如果垂直对齐=0);5=拟合(如果垂直对齐=0))
                '(100 . "AcDbAttribute")
                '(2 . "A")                           ;组码2:属性标记字符串
                '(70 . 0)                            ;组码70:属性标志(1=属性不可见(不出现);2=固定属性;4=输入属性时要求进行验证;8=属性为预置(插入时无提示))
                '(41 . 0.7)                        ;组码41:文字宽度比例
                '(73 . 2)                            ;组码73:字段长度(默认值=0)
                '(74 . 2))                           ;组码74:文字垂直对齐类型(0=基线对正;1=底端对正;2=居中对正;3=顶端对正)
                )
               
                (entmake '((0 . "SEQEND")))
                (setq b (1+ b))
      )
      (princ)
)

yshf 发表于 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)
)

yshf 发表于 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)
)

huxu823 发表于 2024-4-26 10:18:20

yshf 发表于 2024-4-26 10:06
; ;; 或者改为如下较好
; ;; ==============圆圈数字属性块=================
(defun c:tt3(/ sc zr a b...

非常感谢出手帮忙!!!

shirker 发表于 2024-4-27 21:49:45

很好用,虽然一般用不到!
页: [1]
查看完整版本: 数字圆圈属性块,求助!