找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4363|回复: 17

[LISP函数]:制作Block

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-9-8 09:52:19 | 显示全部楼层 |阅读模式

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

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

×

  1. ;;制作块
  2. (defun xd-MKblock (blockname ins-pt)
  3. ;;;做块头
  4.   (entmake (list
  5.              '(0 . "BLOCK")
  6.              '(100 . "AcDbEntity")
  7.              '(100 . "AcDbBlockBegin")
  8.              (cons 2 blockname)
  9.              '(70 . 2)
  10.              (cons 10 ins-pt)
  11.            )
  12.   )
  13. )
  14. (defun xd-MKENDBLK ()
  15. ;;;做块尾
  16.   (entmake (list
  17.              '(0 . "ENDBLK")
  18.              '(100 . "AcDbEntity")
  19.              '(100 . "AcDbBlockEnd")
  20.            )
  21.   )
  22. )
  23. (defun xd-MkINSERT (bname ins-pt)
  24. ;;;插入图块
  25.   (entmakex (list
  26.               '(0 . "INSERT")
  27.               '(100 . "AcDbEntity")
  28.               '(100 . "AcDbBlockReference")
  29.               '(66 . 1)
  30.               (cons 2 bname)
  31.               (cons 10 ins-pt)
  32.             )
  33.   )
  34. )
  35. ;;制造Attribute
  36. (defun xd-MKATTRIB (txt-str ins-pt txt-ht txt-style lay)
  37. ;;;加入属性
  38.   (entmake (list
  39.              '(0 . "ATTRIB")
  40.              '(100 . "AcDbEntity")
  41.              (cons 8 lyr)
  42.              '(100 . "AcDbText")
  43.              (cons 10 ins-pt)
  44.              (cons 40 txt-ht)
  45.              (cons 1 txt-str)
  46.              (cons 7 txt-style)
  47.              '(100 . "AcDbAttribute")
  48.              (cons 2 t-str)
  49.              '(70 . 0)
  50.            )
  51.   )
  52.   (entmake '((0 . "SEQEND")))
  53. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-9-19 22:36:49 | 显示全部楼层
上面的适用制作含属性的块,下面的适用制作普通块

  1. ;;制作做块头
  2. (defun xd-MKblock (blockname pt / blocktype)
  3.   (if (or (/= 'STR (type blockname)) (= "" blockname))
  4.     (setq blockname "*A")
  5.   )
  6.   (if (= (substr blockname 1 1) "*")
  7.     (setq blocktype 1
  8.           blockname "*A"
  9.     )
  10.     (setq blocktype 0)
  11.   )
  12.   (entmake (list
  13.              '(0 . "BLOCK")
  14.              '(100 . "AcDbEntity")
  15.              '(100 . "AcDbBlockBegin")
  16.              (cons 2 blockname)
  17.              (cons 70 blocktype) ;_'(70 . 2);_属性块
  18.              (cons 10 pt)
  19.            )
  20.   )
  21. )
  22. ;;;做块尾
  23. (defun xd-MKENDBLK ()
  24.   (entmake '((0 . "ENDBLK")))
  25. )
  26. ;;;插入图块
  27. (defun xd-MkINSERT (bname ins-pt)
  28.   (entmakex (list
  29.               '(0 . "INSERT")
  30.               '(100 . "AcDbEntity")
  31.               '(100 . "AcDbBlockReference")
  32.               ;;'(66 . 1);_属性
  33.               (cons 2 bname)
  34.               (cons 10 ins-pt)
  35.             )
  36.   )
  37. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-12 16:47:59 | 显示全部楼层
晕,怎么按你上面的修改不能做带属性定义的匿名块?可以的话,如何做?(想做曲线标注,内容可修改)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-11-12 18:51:45 | 显示全部楼层
用 1 楼的代码可以做属性块,注意插入好要对属性赋值
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-11-14 11:24:23 | 显示全部楼层
最初由 afeng0712 发布
[B]望高手解决啊! [/B]

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

使用道具 举报

发表于 2005-11-14 13:44:28 | 显示全部楼层
为了说明问题取一部分说明如下

  1. (SETQ SS (SSGET))
  2. (ENTMAKE (LIST (CONS 0 "BLOCK")
  3.                (CONS 2 "*U")
  4.                (CONS 70 1)
  5.                (CONS 10 P1)
  6.          )
  7. )
  8. (SETQ I 0)
  9. (REPEAT        (SSLENGTH SS)
  10.   (SETQ S3 (SSNAME SS I))
  11.   (SETQ ENT (ENTGET S3))
  12.   (ENTDEL S3)
  13.   (ENTMAKE ENT)
  14.   (SETQ I (1+ I))
  15. )
  16. (SETQ S3 (ENTMAKE '((0 . "ENDBLK"))))
  17. (IF (PRINC S3)
  18.   (PROGN
  19.     (ENTMAKE
  20.       (LIST
  21.         (CONS 0 "INSERT")
  22.         (CONS 66 1)
  23.         (CONS 2 S3)
  24.         (CONS 10 P1)
  25.       )
  26.     )
  27.     (ENTMAKE
  28.       (LIST
  29.         (CONS 0 "ATTDEF")
  30.         (CONS 1 LEN)
  31.         (CONS 2 LEN)
  32.         (CONS 3 LEN)
  33.         (CONS 7 DST)
  34.         (CONS 10 (TRANS MP0 1 0))
  35.         (CONS 11 (TRANS MP0 1 0))
  36.         (CONS 40 DTH)
  37.         (CONS 41 DTW)
  38.         (CONS
  39.           50
  40.           (+ K0
  41.              (ANGLE '(0 0 0) (GETVAR "UCSXDIR"))
  42.           )
  43.         )
  44.         (CONS 70 2)
  45.         (CONS 72 4)
  46.         (CONS 74 2)
  47.       )
  48.     )
  49.     (ENTMAKE '((0 . "SEQEND")))
  50.   )
  51. )
复制代码

完整程序如下:

  1. (DEFUN C:BZ (/          OSM  DLC  DEC         DSC  DSZ  DXO        DXE  DSH  DB   DB1
  2.              DB2  DCD  DCE  DCT         DST  DTH  DGAP        DTW  S2          LT0  S1
  3.              SP0  EP0  P1   FLAG P2   GR   P0        D    S3          TY   PP
  4.              NA          LT   L    L1         L2   PA0  PA1        PA2  K0          K1   K2
  5.              K          LEN  P3   SP1         EP1  MP0  COL        OCOL DBNA SS   STR
  6.             )
  7.   (SETVAR "BLIPMODE" 0)
  8.   (SETVAR "CMDECHO" 0)
  9.   (SETQ OSM (GETVAR "OSMODE"))
  10.   (IF (= (MEMBER "geomcal.arx" (ARX)) NIL)
  11. ;;;注意要小写geomcal.arx
  12.     (ARXLOAD "GEOMCAL")
  13.   )
  14.   (VL-LOAD-COM)
  15.   (GETDVAR)
  16.   (SETQ S2 (SELL "*LINE,ARC" "\n 请选择要标注的线段:"))
  17.   (SETVAR "OSMODE" 33)
  18.   (IF S2
  19.     (PROGN
  20.       (SETQ LT0 (CDR (ASSOC 0 (ENTGET (CAR S2)))))
  21.       (SETQ S1 (VLAX-ENAME->VLA-OBJECT (CAR S2)))
  22.       (SETQ SP0        (TRANS (VLAX-CURVE-GETSTARTPOINT S1) 0 1)
  23.             EP0        (TRANS (VLAX-CURVE-GETENDPOINT S1) 0 1)
  24.       )
  25.       (SETQ P1 (GETPOINT "\n 指定第一条尺寸界线原点<标全长>:"))
  26.     )
  27.     (SETQ P1 (GETPOINT "\n 指定点标注,指定第一条尺寸界线原点:"))
  28.   )
  29.   (SETQ FLAG NIL)
  30.   (IF (AND S1 (NOT P1))
  31.     (SETQ P1 SP0
  32.           P2 EP0
  33.           FLAG T
  34.     )
  35.   )
  36.   (IF (OR (NOT S2)
  37.           (VLAX-CURVE-GETPARAMATPOINT
  38.             S1
  39.             (TRANS P1 1 0)
  40.           )
  41.       )
  42.     (PROGN
  43.       (IF (NOT P2)
  44.         (PROGN
  45.           (SETQ P2 (GETPOINT "\n 指定下一条尺寸界线原点:"))
  46.           (WHILE (= P2 P1)
  47.             (SETQ P2
  48.                    (GETPOINT
  49.                      "\n 指定的下一条尺寸界线原点与第一条尺寸界线原点重合,请重新指定:"
  50.                    )
  51.             )
  52.           )
  53.         )
  54.       )
  55.       (IF (OR (NOT S2)
  56.               (VLAX-CURVE-GETPARAMATPOINT
  57.                 S1
  58.                 (TRANS P2 1 0)
  59.               )
  60.           )
  61.         (PROGN
  62.           (SETQ GR '(12))
  63.           (SETQ P0 "WZ")
  64.           (WHILE (AND (= (CAR GR) 12) (NOT (NUMBERP (READ P0))))
  65.             (PRINC "\n 指定尺寸线位置:")
  66.             (INITGET 128)
  67.             (SETQ P0 (GETPOINT))
  68.             (SETQ GR (GRREAD 2 4 0))
  69.           )
  70.           (IF (= (GETVAR "ERRNO") 0)
  71.             (COND
  72.               ((= (TYPE P0) 'STR)
  73.                (SETQ D (C:CAL P0))
  74.                (SETQ P0 (CADR GR))
  75.               )
  76.               (PROGN
  77.                (COMMAND "_OFFSET" "T" S2 P0 "")
  78.                (SETQ S3 (VLAX-ENAME->VLA-OBJECT (ENTLAST)))
  79.                (SETQ
  80.                  D (DISTANCE SP0
  81.                              (TRANS (VLAX-CURVE-GETSTARTPOINT S3) 0 1)
  82.                    )
  83.                )
  84.                (ENTDEL (ENTLAST))
  85.               )
  86.             )
  87.           )
  88.         )
  89.       )
  90.       (SETQ TY (LIST (ENTLAST)))
  91.       (SETQ PP (LIST P1))
  92.       (WHILE (AND P2 (/= P2 ""))
  93.         (COND
  94.           ((= P2 "U")
  95.            (SETQ TY (CDR TY))
  96.            (SETQ NA (ENTNEXT (CAR TY)))
  97.            (WHILE NA
  98.              (ENTDEL NA)
  99.              (SETQ NA (ENTNEXT NA))
  100.            )
  101.            (SETQ PP (CDR PP))
  102.            (SETQ P1 (CAR PP))
  103.            (GETPT)
  104.           )
  105.           ((PROGN
  106.              (WHILE (AND S2
  107.                          (NOT (VLAX-CURVE-GETPARAMATPOINT
  108.                                 S1
  109.                                 (TRANS P2 1 0)
  110.                               )
  111.                          )
  112.                     )
  113.                (SETQ
  114.                  P2
  115.                   (GETPOINT
  116.                     "\n 指定的下一条尺寸界线原点不在对应的线段上,请重新指定:"
  117.                   )
  118.                )
  119.              )
  120.              (SETVAR "OSMODE" 0)
  121.              (IF (NOT S2)
  122.                (PROGN
  123.                  (COMMAND "_DIMLINEAR" P1 P2 P0)
  124.                  (SETQ
  125.                    P0 (TRANS (CDR (ASSOC 10 (ENTGET (ENTLAST)))) 0 1)
  126.                  )
  127.                )
  128.                (PROGN
  129.                  (SETQ LT LT0)
  130.                  (GETLQK S1 P1)
  131.                  (SETQ L1  L
  132.                        PA1 PA0
  133.                        K1  K0
  134.                  )
  135.                  (GETLQK S1 P2)
  136.                  (SETQ L2  L
  137.                        PA2 PA0
  138.                        K2  K0
  139.                  )
  140.                  (IF (> PA1 PA2)
  141.                    (PROGN
  142.                      (SETQ PA0 PA1)
  143.                      (SETQ PA1 PA2)
  144.                      (SETQ PA2 PA0)
  145.                    )
  146.                  )
  147.                  (SETQ LEN (ABS (- L2 L1)))
  148.                  (IF (WCMATCH LT "*POLYLINE")
  149.                    (COND ((EQUAL LEN (DISTANCE P1 P2) 0.0001)
  150.                           (SETQ LT "LINE")
  151.                          )
  152.                          ((AND (>= PA1 (FIX PA1))
  153.                                (<= PA2 (1+ (FIX PA1)))
  154.                           )
  155.                           (SETQ LT "ARC")
  156.                          )
  157.                    )
  158.                  )
  159.                  (SETQ MP0 (GETMP0 S1 P1 P2))
  160.                  (IF (= LT "LINE")
  161.                    (PROGN
  162.                      (GETLQK S1 MP0)
  163.                      (SETQ K (+ K0 (/ PI 2)))
  164.                      (IF (< (COS (- K (ANGLE P2 P0))) 0)
  165.                        (SETQ K (- K PI))
  166.                      )
  167.                      (SETQ P0 (POLAR P2 K D))
  168.                      (COMMAND "_DIMALIGNED" P1 P2 P0)
  169.                    )
  170.                    (PROGN
  171.                      (SETQ LEN (RTOS (* DLC LEN) 2 DEC))
  172.                      (GETCEN)
  173.                      (IF (= LT "ARC")
  174.                        (PROGN
  175.                          (COND ((>= (DISTANCE P3 P0) (DISTANCE P3 MP0))
  176.                                 (SETQ K (ANGLE P3 MP0))
  177.                                 (SETQ K0 (ANGLE P3 P2))
  178.                                )
  179.                                ((SETQ K (ANGLE MP0 P3))
  180.                                 (SETQ K0 (ANGLE P2 P3))
  181.                                )
  182.                          )
  183.                          (SETQ MP0 (POLAR MP0 K D))
  184.                          (SETQ K (- (* 2.0 K) K0))
  185.                          (SETQ P0 (POLAR P2 K0 D))
  186.                          (COMMAND "_LINE" P1 (POLAR P1 (+ K PI) D) "")
  187.                          (SETQ NA (ENTLAST))
  188.                          (COMMAND "_LINE" P2 (POLAR P2 (+ K0 PI) D) "")
  189.                          (SETQ NA1 (ENTLAST))
  190.                          (COMMAND "_DIMANGULAR"
  191.                                   (LIST NA P1)
  192.                                   (LIST NA1 P2)
  193.                                   "T"
  194.                                   LEN
  195.                                   MP0
  196.                          )
  197.                          (ENTDEL NA)
  198.                          (ENTDEL NA1)
  199.                        )
  200.                        (PROGN
  201.                          (PROGN
  202.                            (SETQ S3 (VLA-COPY S1))
  203.                            (IF (WCMATCH LT0 "*POLYLINE")
  204.                              (VLA-PUT-CONSTANTWIDTH S3 0)
  205.                            )
  206.                            (SETQ S3 (VLAX-VLA-OBJECT->ENAME S3))
  207.                            (SETQ S3 (LIST S3 MP0))
  208.                            (SETQ NA (ENTLAST))
  209.                            (IF (> L2 L1)
  210.                              (PROGN
  211.                                (COMMAND "_BREAK" S3 "F" EP0 P2)
  212.                                (COMMAND "_BREAK" S3 "F" SP0 P1)
  213.                              )
  214.                              (PROGN
  215.                                (COMMAND "_BREAK" S3 "F" EP0 P1)
  216.                                (COMMAND "_BREAK" S3 "F" SP0 P2)
  217.                              )
  218.                            )
  219.                          )
  220.                          (COMMAND "_OFFSET" D S3 P0 "")
  221.                          (CL DCD)
  222.                          (COMMAND "_.CHPROP"
  223.                                   (ENTLAST)
  224.                                   ""
  225.                                   "LT"
  226.                                   "CONTINUOUS"
  227.                                   "LA"
  228.                                   (GETVAR "CLAYER")
  229.                                   "C"
  230.                                   COL
  231.                                   ""
  232.                          )
  233.                          (SETVAR "CECOLOR" OCOL)
  234.                          (ENTDEL (CAR S3))
  235.                          (SETQ NA (ENTLAST))
  236.                          (SETQ S3 (VLAX-ENAME->VLA-OBJECT (ENTLAST)))
  237.                          (SETQ SP1
  238.                                 (TRANS (VLAX-CURVE-GETSTARTPOINT S3) 0 1)
  239.                          )
  240.                          (SETQ
  241.                            EP1 (TRANS (VLAX-CURVE-GETENDPOINT S3) 0 1)
  242.                          )
  243.                          (CL DCE)
  244.                          (DRAWL)
  245.                          (GETLQK S3 SP1)
  246.                          (SETQ
  247.                            K1 (CVUNIT (+ K0 PI) "RADIANS" "DEGREES")
  248.                          )
  249.                          (GETLQK S3 EP1)
  250.                          (SETQ K2 (CVUNIT K0 "RADIANS" "DEGREES"))
  251.                          (SETVAR "CECOLOR" OCOL)
  252.                          (CL DCD)
  253.                          (IARROW)
  254.                          (SETVAR "CECOLOR" OCOL)
  255.                          (SETQ MP0 (GETMP0 S3 SP1 EP1))
  256.                          (GETLQK S3 MP0)
  257.                          (IF (< (COS K0) 0)
  258.                            (SETQ K0 (+ K0 PI))
  259.                          )
  260.                          (SETQ MP0 (POLAR MP0 (+ K0 (/ PI 2)) DGAP))
  261.                          (CL DCT)
  262.                          (SETVAR "CECOLOR" OCOL)
  263.                          (SETQ SS (SSADD))
  264.                          (WHILE        NA
  265.                            (SETQ SS (SSADD NA SS))
  266.                            (SETQ NA (ENTNEXT NA))
  267.                          )
  268.                          (ENTMAKE (LIST        (CONS 0 "BLOCK")
  269.                                         (CONS 2 "*U")
  270.                                         (CONS 70 1)
  271.                                         (CONS 10 P1)
  272.                                   )
  273.                          )
  274.                          (SETQ I 0)
  275.                          (REPEAT (SSLENGTH SS)
  276.                            (SETQ S3 (SSNAME SS I))
  277.                            (SETQ ENT (ENTGET S3))
  278.                            (ENTDEL S3)
  279.                            (ENTMAKE ENT)
  280.                            (SETQ I (1+ I))
  281.                          )
  282.                          (SETQ S3 (ENTMAKE '((0 . "ENDBLK"))))
  283.                          (IF (PRINC S3)
  284.                            (PROGN
  285.                              (ENTMAKE
  286.                                (LIST
  287.                                  (CONS 0 "INSERT")
  288.                                  (CONS 66 1)
  289.                                  (CONS 2 S3)
  290.                                  (CONS 10 P1)
  291.                                )
  292.                              )
  293.                              (ENTMAKE
  294.                                (LIST
  295.                                  (CONS 0 "ATTDEF")
  296.                                  (CONS 1 LEN)
  297.                                  (CONS 2 LEN)
  298.                                  (CONS 3 LEN)
  299.                                  (CONS 7 DST)
  300.                                  (CONS 10 (TRANS MP0 1 0))
  301.                                  (CONS 11 (TRANS MP0 1 0))
  302.                                  (CONS 40 DTH)
  303.                                  (CONS 41 DTW)
  304.                                  (CONS
  305.                                    50
  306.                                    (+ K0
  307.                                       (ANGLE '(0 0 0) (GETVAR "UCSXDIR"))
  308.                                    )
  309.                                  )
  310.                                  (CONS 70 2)
  311.                                  (CONS 72 4)
  312.                                  (CONS 74 2)
  313.                                )
  314.                              )
  315.                              (ENTMAKE '((0 . "SEQEND")))
  316.                            )
  317.                          )
  318.                        )
  319.                      )
  320.                    )
  321.                  )
  322.                )
  323.              )
  324.              (SETQ TY (CONS (ENTLAST) TY))
  325.              (SETQ PP (CONS P2 PP))
  326.              (SETQ P1 (CAR PP))
  327.              (SETVAR "OSMODE" 33)
  328.              (GETPT)
  329.            )
  330.           )
  331.         )
  332.       )
  333.     )
  334.     (PRINC "\n 请确认所指定的尺寸界线原点在对应的线段上!")
  335.   )
  336.   (SETVAR "CMDECHO" 1)
  337.   (SETVAR "OSMODE" OSM)
  338.   (PRINC)
  339. )
  340. (PRINC "\n 标注程序已加载,运行命令:BZ")
  341. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  342. (DEFUN SELL (_TYPES MSG / GR CODE)
  343.   (PROMPT MSG)
  344.   (SETQ S1 (ENTSEL))
  345.   (SETQ GR (GRREAD 2 4 2))
  346.   (IF (= (CAR GR) 5)
  347.     (WHILE (NOT S1)
  348.       (WHILE (NOT S1)
  349.         (PROMPT "\n 未选中线段,请重新选择线段:")
  350.         (SETQ S1 (ENTSEL))
  351.       )
  352.       (IF
  353.         (NOT (WCMATCH (CDR (ASSOC 0 (ENTGET (CAR S1)))) _TYPES))
  354.          (SETQ S1 NIL)
  355.       )
  356.     )
  357.   )
  358.   (IF S1
  359.     S1
  360.     NIL
  361.   )
  362. )
  363. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  364. (DEFUN CL (DCLR)
  365.   (IF (OR (= DCLR 0) (= DCLR 256))
  366.     (SETQ COL (GETVAR "CECOLOR"))
  367.     (SETQ COL (ITOA DCLR))
  368.   )
  369.   (SETVAR "CECOLOR" COL)
  370. )
  371. ;;在曲线上给定的点处画法向直线并得到端点
  372. (DEFUN DRAWL (/ K11 K12)
  373.   (IF (> L2 L1)
  374.     (PROGN
  375.       (SETQ K11 (ANGLE P1 SP1))
  376.       (SETQ K12 (ANGLE P2 EP1))
  377.       (SETQ P0 EP1)
  378.     )
  379.     (PROGN
  380.       (SETQ K11 (ANGLE P1 EP1))
  381.       (SETQ K12 (ANGLE P2 SP1))
  382.       (SETQ P0 SP1)
  383.     )
  384.   )
  385.   (COMMAND "_LINE"
  386.            (POLAR P1 K11 DXO)
  387.            (POLAR P1 K11 (+ D DXE))
  388.            ""
  389.   )
  390.   (COMMAND "_LINE"
  391.            (POLAR P2 K12 DXO)
  392.            (POLAR P2 K12 (+ D DXE))
  393.            ""
  394.   )
  395. )
  396. ;;获取曲线上给定的点距起点距离以及切线方向
  397. (DEFUN GETLQK (S1 PT)
  398.   (SETQ L (VLAX-CURVE-GETDISTATPOINT S1 (TRANS PT 1 0)))
  399.   (SETQ PA0 (VLAX-CURVE-GETPARAMATPOINT S1 (TRANS PT 1 0)))
  400.   (SETQ K0 (VLAX-CURVE-GETFIRSTDERIV S1 PA0))
  401.   (SETQ K0 (ANGLE '(0 0 0) K0))
  402.   (SETQ K0 (+ (- K0 (ANGLE '(0 0 0) (GETVAR "UCSXDIR")))))
  403. )
  404. (DEFUN GETPT ()
  405.   (IF FLAG
  406.     (SETQ P2 "")
  407.     (PROGN
  408.       (INITGET 128 "U")
  409.       (PRINC "\n 指定下一条尺寸界线原点或[放弃(U)]:")
  410.       (SETQ P2 (GETPOINT))
  411.       (WHILE (= P2 P1)
  412.         (SETQ
  413.           P2
  414.            (GETPOINT
  415.              "\n 指定的下一条尺寸界线原点与上一指定点重合,请重新指定:"
  416.            )
  417.         )
  418.       )
  419.     )
  420.   )
  421. )
  422. (DEFUN GETMP0 (S1 P1 P2 / L1 L2)
  423.   (SETQ L1 (VLAX-CURVE-GETDISTATPOINT S1 (TRANS P1 1 0)))
  424.   (SETQ L2 (VLAX-CURVE-GETDISTATPOINT S1 (TRANS P2 1 0)))
  425.   (TRANS (VLAX-CURVE-GETPOINTATDIST S1 (/ (+ L1 L2) 2)) 0 1)
  426. )
  427. (DEFUN IARROW (/ STR)
  428.   (SETQ        STR
  429.          "ARCHTICK BOXBLANK BOXFILLED CLOSED CLOSEDBLANK DATUMBLANK DATUMFILLED DOT DOTBLANK DOTSMALL INTEGRAL NONE OBLIQUE OPEN OPEN30 OPEN90 ORIGIN ORIGIN2 SMALL"
  430.   )
  431.   (IF (= DSH 0)
  432.     (SETQ DB1 DB
  433.           DB2 DB
  434.     )
  435.   )
  436.   (IJT DB1 SP1 K1)
  437.   (IJT DB2 EP1 K2)
  438. )
  439. (DEFUN IJT (DB PT K)
  440.   (IF (/= DB "")
  441.     (PROGN
  442.       (IF (VL-STRING-SEARCH DB STR)
  443.         (SETQ DB (STRCAT "_" DB))
  444.       )
  445.       (COMMAND "-INSERT" DB PT DSZ "" K)
  446.     )
  447.     (PROGN
  448.       (GETARROW)
  449.       (COMMAND "-INSERT" "ARROW" PT DSZ "" K)
  450.     )
  451.   )
  452. )
  453. (DEFUN GETDVAR ()
  454.   (SETQ        DLC  (GETVAR "DIMLFAC")
  455.         DEC  (GETVAR "DIMDEC")
  456.         DSC  (GETVAR "DIMSCALE")
  457.         DSZ  (GETVAR "DIMASZ")
  458.         DXO  (GETVAR "DIMEXO")
  459.         DXE  (GETVAR "DIMEXE")
  460.         DSH  (GETVAR "DIMSAH")
  461.         DB   (GETVAR "DIMBLK")
  462.         DB1  (GETVAR "DIMBLK1")
  463.         DB2  (GETVAR "DIMBLK2")
  464.         DCD  (GETVAR "DIMCLRD")
  465.         DCE  (GETVAR "DIMCLRE")
  466.         DCT  (GETVAR "DIMCLRT")
  467.         DST  (GETVAR "DIMTXSTY")
  468.         DTH  (GETVAR "DIMTXT")
  469.         DGAP (GETVAR "DIMGAP")
  470.         OCOL (GETVAR "CECOLOR")
  471.   )
  472.   (SETQ        DB  (STRCASE DB)
  473.         DB1 (STRCASE DB1)
  474.         DB2 (STRCASE DB2)
  475.   )
  476.   (SETQ
  477.     DTW
  478.      (CDR (ASSOC 41 (TBLSEARCH "STYLE" DST)))
  479.   )
  480.   (IF (= DSC 0.0)
  481.     (SETQ DSC 1.0)
  482.   )
  483.   (SETQ        DXO  (* DSC DXO)
  484.         DXE  (* DSC DXE)
  485.         DSZ  (* DSC DSZ)
  486.         DTH  (* DSC DTH)
  487.         DGAP (+ (* DSC DGAP) (/ DTH 2.0))
  488.   )
  489. )
  490. ;;;  制作箭头块
  491. (DEFUN GETARROW        (/ ACADOBJECT ACADDOCUMENT *BLOCKS*)
  492.   (SETQ ACADOBJECT (VLAX-GET-ACAD-OBJECT))
  493.   (SETQ ACADDOCUMENT (VLA-GET-ACTIVEDOCUMENT ACADOBJECT))
  494.   (SETQ *BLOCKS* (VLA-GET-BLOCKS ACADDOCUMENT))
  495.   (IF (NOT
  496.         (TBLOBJNAME "BLOCK" "ARROW")
  497.       )
  498.     (PROGN
  499.       (CL DCD)
  500.       (VLA-ADDSOLID
  501.         (VLA-ADD *BLOCKS* (VLAX-3D-POINT '(0 0 0)) "ARROW")
  502.         (VLAX-3D-POINT '(0 0 0))
  503.         (VLAX-3D-POINT (LIST -1 (/ 1.0 6.0) 0))
  504.         (VLAX-3D-POINT (LIST -1 (/ -1.0 6.0) 0))
  505.         (VLAX-3D-POINT '(0 0 0))
  506.       )
  507.     )
  508.   )
  509. )
  510. (DEFUN GETCEN (/ P4 P5 P6)
  511.   (SETQ        P3 (GETMP0 S1 P1 MP0)
  512.         P4 (GETMP0 S1 P2 MP0)
  513.   )
  514.   (SETQ        P5 (C:CAL "(P1+MP0)/2")
  515.         P6 (C:CAL "(P2+MP0)/2")
  516.   )
  517.   (SETQ P3 (INTERS P3 P5 P4 P6 NIL))
  518. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-11-14 18:46:41 | 显示全部楼层
你还没有理解属性与块的关系,ATTDEF要在 BlockDef 中定义,也就是要在 ENDBLK 之前加入,INSERT 之后是没有 ATTDEF 的,只有 ATTRIB 了。

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

使用道具 举报

发表于 2005-11-14 21:35:44 | 显示全部楼层
改成这样怎么不行?

  1. (ENTMAKE (LIST (CONS 0 "BLOCK")
  2.                (CONS 2 "*U")
  3.                (CONS 70 3)
  4.                (CONS 10 P1)
  5.          )
  6. )
  7. (SETQ I 0)
  8. (REPEAT        (SSLENGTH SS)
  9.   (SETQ S3 (SSNAME SS I))
  10.   (SETQ ENT (ENTGET S3))
  11.   (ENTDEL S3)
  12.   (ENTMAKE ENT)
  13.   (SETQ I (1+ I))
  14. )
  15. (ENTMAKE
  16.   (LIST
  17.     (CONS 0 "ATTDEF")
  18.     (CONS 1 LEN)
  19.     (CONS 2 LEN)
  20.     (CONS 3 LEN)
  21.     (CONS 7 DST)
  22.     (CONS 10 (TRANS MP0 1 0))
  23.     (CONS 11 (TRANS MP0 1 0))
  24.     (CONS 40 DTH)
  25.     (CONS 41 DTW)
  26.     (CONS
  27.       50
  28.       (+ K0
  29.          (ANGLE '(0 0 0) (GETVAR "UCSXDIR"))
  30.       )
  31.     )
  32.     (CONS 70 2)
  33.     (CONS 72 4)
  34.     (CONS 74 2)
  35.   )
  36. )
  37. (SETQ S3 (ENTMAKE '((0 . "ENDBLK"))))
  38. (IF (PRINC S3)
  39.   (ENTMAKE
  40.     (LIST
  41.       (CONS 0 "INSERT")
  42.       (CONS 2 S3)
  43.       (CONS 10 P1)
  44.     )
  45.   )
  46. )
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-15 12:41:11 | 显示全部楼层
方法是对的
做块的时候,attdef实体要放在块定义里面
插入的时候,attrib紧跟着块
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-15 14:54:16 | 显示全部楼层
可是实现不了,有没有研究匿名块是不是不能带属性? 注意是匿名块再就是带有要能修改文字内容的属性块!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 12个

财富等级: 恭喜发财

发表于 2005-11-16 20:49:33 | 显示全部楼层
哈哈,将生成的块名改为匿名块名就可实现匿名块带属性了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-24 18:06:10 | 显示全部楼层
;;制作块
(defun xd-MKblock (blockname ins-pt)
;;;做块头
  (entmake (list
             '(0 . "BLOCK")
             '(100 . "AcDbEntity")
             '(100 . "AcDbBlockBegin")
             (cons 2 blockname)
             '(70 . 2)
             (cons 10 ins-pt)
           )
  )
)
(defun xd-MKENDBLK ()
;;;做块尾
  (entmake (list
             '(0 . "ENDBLK")
             '(100 . "AcDbEntity")
             '(100 . "AcDbBlockEnd")
           )
  )
)
(defun xd-MkINSERT (bname ins-pt)
;;;插入图块
  (entmakex (list
              '(0 . "INSERT")
              '(100 . "AcDbEntity")
              '(100 . "AcDbBlockReference")
              '(66 . 1)
              (cons 2 bname)
              (cons 10 ins-pt)
            )
  )
)
;;制造Attribute
(defun xd-MKATTRIB (txt-str ins-pt txt-ht txt-style lay)
;;;加入属性
  (entmake (list
             '(0 . "ATTRIB")
             '(100 . "AcDbEntity")
             (cons 8 lyr)
             '(100 . "AcDbText")
             (cons 10 ins-pt)
             (cons 40 txt-ht)
             (cons 1 txt-str)
             (cons 7 txt-style)
             '(100 . "AcDbAttribute")
             (cons 2 t-str)
             '(70 . 0)
           )
  )
  (entmake '((0 . "SEQEND")))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-6-15 10:25:51 | 显示全部楼层
制作属性块时,你用了entmake,entmakeX,两者到底有何区别?

点评

entmakex 可以返回 Entity 进行后续操作  详情 回复 发表于 2013-6-15 17:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 03:16 , Processed in 0.335558 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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