1993063 发表于 2014-9-27 00:05:31

其实不一定要用entmake方式,用vlaobj也比较快

wmz 发表于 2014-9-27 14:06:19

;;;插入块(岸上点)
(defun MINSERTA (inspt scale height / pt)
(setq pt (polar inspt 0 (* 1.2 scale)))
(entmake (list
             '(0 . "INSERT")
             '(100 . "AcDbEntity")
             '(100 . "AcDbBlockReference")
             '(66 . 1);;;属性跟随标志,1跟随,0不跟随
             (cons 2 "GC200")
             (cons 10 inspt)
             (cons 41 scale)
             (cons 42 scale)
             (cons 43 scale)
             '(-3 ("SOUTH" (1000 . "202101")))
         )
)
;;;插入属性
    (entmake (list
            '(0 . "ATTRIB")
            '(100 . "AcDbEntity")
            '(100 . "AcDbText")
          (cons 10 pt)
            (cons 40 (* 10.0 scale))
            (cons 50 0)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 height)
            (cons 7 "HZ")
            (cons 72 0)
            (cons 11 pt)
            '(100 . "AcDbAttribute")
            (cons 2 "height")
            (cons 70 0)
            (cons 74 2)
         )
    )
         ;;;结束标志
          (entmake '((0 . "SEQEND")))
         (princ)
)
;;;插入块(水下点)
(defun MINSERTS (inspt scale JD integer decimal / pt ptz pty)
(setq pt (polar inspt 0 (* 1.2 scale)))
(setq ptz (polar pt jd -0.8))
(setq pty (polar pt jd 0.5))
(entmake (list
             '(0 . "INSERT")
             '(100 . "AcDbEntity")
             '(100 . "AcDbBlockReference")
             '(66 . 1);;;属性跟随标志,1跟随,0不跟随
             (cons 2 "GC200")
             (cons 10 inspt)
             (cons 41 scale)
             (cons 42 scale)
             (cons 43 scale)
             (cons 50 JD)
             '(-3 ("SOUTH" (1000 . "186400")))
         )
)
;;;插入属性
    (entmake (list
            '(0 . "ATTRIB")
            '(100 . "AcDbEntity")
            '(100 . "AcDbText")
          (cons 10 pt)
            (cons 40 (* 10.0 scale))
            (cons 50 JD)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 integer)
            (cons 7 "HZ")
            (cons 72 2);;右对齐
            (cons 11 ptz)
            '(100 . "AcDbAttribute")
            (cons 2 "integer")
            (cons 70 0)
          (cons 73 2)
            (cons 74 1)
         )
    )
    (entmake (list
            '(0 . "ATTRIB")
            '(100 . "AcDbEntity")
            '(100 . "AcDbText")
          (cons 10 pt)
            (cons 40 (* 10.0 scale))
            (cons 50 JD)
            (cons 41 0.8)
            (cons 51 0)
            (cons 1 decimal)
            (cons 7 "HZ")
            (cons 72 0) ;;左对齐
            (cons 11 pty)
            '(100 . "AcDbAttribute")
            (cons 2 "decimal")
            (cons 70 0)
          (cons 73 2)
            (cons 74 1)
         )
    )
         ;;;结束标志
          (entmake '((0 . "SEQEND")))
         (princ)
)
对于岸上点:(MINSERTA inspt scale height)--inspt为插入点,scale为缩放系数,height为属性标志和值;对于水下点:
(MINSERTSinspt scale JD integer decimal )--inspt为插入点,scale为缩放系数,JD为文字转角,integer为高程点文字注记的整数部分,declmal为小数后部分(对于搞河道测绘的行业规范)


reyun 发表于 2017-11-4 14:31:18

wmz 发表于 2014-9-25 21:25
;;;测试
(defun c:tt()
(setq ent (car (entsel "\n请选择块: ")))


是可以的,'("height" . "33.56")-->(list '("height" . "33.56"))

sasufa 发表于 2018-1-8 17:04:29

菜卷鱼 发表于 2014-7-21 08:35
前段时间试了一下复制属性块,工作忙没来得及更多测试,看一下下面的一堆英文字母是否对你有用,当前是将属 ...

帮上我了,感谢一下

fl202 发表于 2018-1-10 17:44:36

command 插入,有什么不好的吗?

冒个烟圈 发表于 2018-7-20 11:13:47

wmz 发表于 2014-9-27 14:06
;;;插入块(岸上点)
(defun MINSERTA (inspt scale height / pt)
(setq pt (polar inspt 0 (* 1.2 scale ...

学习了,谢谢

流浪的军刀 发表于 2019-10-17 06:49:09

我也在想用LISP怎么做料单,不过还没有头绪.先来学习学习.

坠茵落溷 发表于 2024-1-6 19:36:13

楼主这个问题解决了吗?

飞雪神光 发表于 2024-1-6 20:55:40

本帖最后由 飞雪神光 于 2024-1-6 20:59 编辑

坠茵落溷 发表于 2024-1-6 19:36
楼主这个问题解决了吗?
(setvar "attreq" 0)正常情况下可以先插入 然后设置属性 恢复 (setvar "attreq" 1)
页: 1 [2]
查看完整版本: entmake如何插入属性块?