明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 14403|回复: 49

[【风之影】] [源码]提取DXF组码

  [复制链接]
发表于 2011-9-5 22:04 | 显示全部楼层 |阅读模式
本帖最后由 cabinsummer 于 2016-12-24 15:16 编辑

  1. (defun C:DXF
  2.   (
  3.       /
  4.       DCL_ID            ERRMSG            PICK_ENT          TILES_ONOFF
  5.       DXF_ERROR         NEXT_ENT          SHOW_LIST         WHAT_NEXT
  6.       ENT_LIST          OLD_CMDECHO       SHOW_NEXT_ENT     OUTPUT_LIST
  7.       LIST_POINTER      NEW_ITEM          SHOW_FEATURES     ENTITY_TYPE
  8.       GET_FEATURES      RESET_VALUES      FLAG              SELECTED_ITEM
  9.       RANGE_LISTS       POINT_3D          EDITBOX_VALUE     BITS_FLAG
  10.       CALCULATE_BITS_SUM
  11.       TILES_NAME        TILES_VALUE
  12.   )

  13.   (defun DXF_ERROR ( ERRMSG )
  14.       (if
  15.          (and
  16.             (/= ERRMSG "功能取消")
  17.             (/= ERRMSG "退出程序")
  18.          )
  19.          (princ (strcat "\nDXF应用程序错误: " ERRMSG "\n"))
  20.       )

  21.       (setvar "CMDECHO" OLD_CMDECHO)
  22.       (setq *error* OLD_ERROR)

  23.       (setq
  24.          DCL_ID             nil NEXT_ENT           nil SHOW_NEXT_ENT      nil
  25.          DXF_ERROR          nil OLD_CMDECHO        nil TILES_ONOFF        nil
  26.          ENT_LIST           nil PICK_ENT           nil WHAT_NEXT          nil
  27.          ERRMSG             nil SHOW_LIST          nil OUTPUT_LIST        nil
  28.          LIST_POINTER       nil
  29.       )
  30.       (princ)
  31.    )

  32.    (defun GET_FEATURES
  33.       (
  34.          ENTITY_TYPE FLAG SUBCLASS
  35.          /
  36.          ENT DIMSTYLE_LIST GETDIMSTYLE GETLAYER LAYERS_LIST
  37.          TXTSTYLE_LIST GETTXTSTYLE
  38.       )

  39.       (setq GETLAYER (cdr (assoc 2 (tblnext "LAYER" T))))
  40.       (while GETLAYER
  41.          (setq LAYERS_LIST (append LAYERS_LIST (list GETLAYER)))
  42.          (setq GETLAYER (cdr (assoc 2 (tblnext "LAYER"))))
  43.       )
  44.       (setq LAYERS_LIST (acad_strlsort LAYERS_LIST))

  45.       (setq GETTXTSTYLE (cdr (assoc 2 (tblnext "STYLE" T))))
  46.       (while GETTXTSTYLE
  47.          (setq TXTSTYLE_LIST (append TXTSTYLE_LIST (list GETTXTSTYLE)))
  48.          (setq GETTXTSTYLE (cdr (assoc 2 (tblnext "STYLE"))))
  49.       )
  50.       (setq DIMSTYLE_LIST (acad_strlsort TXTSTYLE_LIST))

  51.       (setq GETDIMSTYLE (cdr (assoc 2 (tblnext "DIMSTYLE" T))))
  52.       (while GETDIMSTYLE
  53.          (setq DIMSTYLE_LIST (append DIMSTYLE_LIST (list GETDIMSTYLE)))
  54.          (setq GETDIMSTYLE (cdr (assoc 2 (tblnext "DIMSTYLE"))))
  55.       )
  56.       (setq DIMSTYLE_LIST (acad_strlsort DIMSTYLE_LIST))

  57.       (cond
  58.          ((= FLAG -1)
  59.             (list
  60.                (list "图元名")
  61.                nil nil nil nil
  62.             )
  63.          )
  64.          ((= FLAG 0) (list (list "图元类型") nil nil nil nil))
  65.          ((= FLAG 5) (list (list "图元句柄") nil nil nil nil))
  66.          ((= FLAG 102)
  67.             (list
  68.                (list "供应用程序使用的控制字符串")
  69.                nil nil nil nil
  70.             )
  71.          )
  72.          ((= FLAG 100) (list (list "子类数据标记") nil nil nil nil))
  73.          ((= FLAG 67)
  74.             (list
  75.                (list "模型空间/图纸空间")
  76.                (list
  77.                   (list 0 1)
  78.                   (list
  79.                      "0\t模型空间"
  80.                      "1\t图纸空间"
  81.                   )
  82.                )
  83.                nil nil nil
  84.             )
  85.          )
  86.          ((= FLAG 8)
  87.             (list (list "图层名") (list LAYERS_LIST LAYERS_LIST) nil nil nil)
  88.          )
  89.          ((= FLAG 6)
  90.             (list
  91.                (list
  92.                   "线型名(随层)."
  93.                   "线型名(随块)."
  94.                )
  95.                nil (cdr (assoc FLAG ENT_LIST)) nil nil
  96.             )
  97.          )
  98.          ((= FLAG 62)
  99.             (list
  100.                (list
  101.                   "颜色号 0 = 随块.256 = 随层."
  102.                   "负值表示层关闭. 禁止(选项)."
  103.                )
  104.                nil (cdr (assoc FLAG ENT_LIST)) nil nil
  105.             )
  106.          )
  107.          ((= FLAG 48)
  108.             (list
  109.                (list "线型比例(选项)")
  110.                nil (cdr (assoc FLAG ENT_LIST)) nil nil
  111.             )
  112.          )
  113.          ((= FLAG 60)
  114.             (list
  115.                (list "可见性(选项)")
  116.                (list (list 0 1) (list "0\t可见" "1\t不可见")) nil nil nil
  117.             )
  118.          )

  119.          ((= ENTITY_TYPE "CIRCLE")
  120.             (cond
  121.                ((= FLAG 39)
  122.                   (list
  123.                      (list "厚度 (选项; 缺省 = 0)")
  124.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  125.                   )
  126.                )
  127.                ((= FLAG 10)
  128.                   (list
  129.                      (list "中心点 (OCS中): 3D点")
  130.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  131.                   )
  132.                )
  133.                ((= FLAG 40) (list (list "半径") nil (cdr (assoc FLAG ENT_LIST)) nil nil))
  134.                ((= FLAG 210)
  135.                   (list
  136.                      (list "拉伸方向(选项; 缺省 = 0, 0, 1): 3D矢量")
  137.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  138.                   )
  139.                )
  140.                (T (list nil nil nil nil nil))
  141.             )
  142.          )

  143.          ((= ENTITY_TYPE "DIMENSION")
  144.             (cond
  145.                ((= FLAG 2)
  146.                   (list
  147.                      (list "包含构成标注图片的图元的块的名称")
  148.                      nil nil nil nil
  149.                   )
  150.                )
  151.                ((= FLAG 10)
  152.                   (list
  153.                      (list "定义点(WCS中): 3D点")
  154.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  155.                   )
  156.                )
  157.                ((= FLAG 11)
  158.                   (list
  159.                      (list "标注文字的中点(OCS中): 3D点")
  160.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  161.                   )
  162.                )
  163.                ((= FLAG 70)
  164.                   (list
  165.                      (list "标注类型")
  166.                      nil nil nil (list (cdr (assoc FLAG ENT_LIST)) (list 32 64 128))
  167.                   )
  168.                )
  169.                ((= FLAG 1)
  170.                   (list
  171.                      (list "由用户明确输入的标注文字")
  172.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  173.                   )
  174.                )
  175.                ((= FLAG 53)
  176.                   (list
  177.                      (list
  178.                         "标注文字与其默认方向所成的旋转角度"
  179.                         "(尺寸线方向)"
  180.                      )
  181.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  182.                   )
  183.                )
  184.                ((= FLAG 51)
  185.                   (list
  186.                      (list
  187.                         "所有标注类型均有可选的51组码,表示标注图元的水平方向"
  188.                         "标注图元决定水平、垂直和旋转线性标注的标注文字和直线的方向"
  189.                      )
  190.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  191.                   )
  192.                )
  193.                ((= FLAG 3)
  194.                   (list
  195.                      (list "标注样式名")
  196.                      (list DIMSTYLE_LIST DIMSTYLE_LIST) nil nil nil
  197.                   )
  198.                )
  199.                ((= FLAG 210)
  200.                   (list
  201.                      (list "拉伸方向(选项; 缺省 = 0, 0, 1): 3D矢量")
  202.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  203.                   )
  204.                )

  205.                ((and (= FLAG 12) (= SUBCLASS "AcDbAlignedDimension"))
  206.                   (list
  207.                      (list
  208.                         "标注克隆的插入点:"
  209.                         "基线和连续(OCS中): 3D点"
  210.                      )
  211.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  212.                   )
  213.                )
  214.                ((and (= FLAG 13) (= SUBCLASS "AcDbAlignedDimension"))
  215.                   (list
  216.                      (list
  217.                         "线性标注和角度标注的定义点(WCS中): 3D点"
  218.                         "指定的第一个延长线的起点"
  219.                      )
  220.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  221.                   )
  222.                )
  223.                ((and (= FLAG 14) (= SUBCLASS "AcDbAlignedDimension"))
  224.                   (list
  225.                      (list
  226.                         "线性标注和角度标注的定义点(WCS中): 3D点"
  227.                         "指定的第二个延长线的起点"
  228.                      )
  229.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  230.                   )
  231.                )

  232.                ((= FLAG 50)
  233.                   (list
  234.                      (list "转角标注、水平标注或垂直标注的角度")
  235.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  236.                   )
  237.                )
  238.                ((= FLAG 52)
  239.                   (list
  240.                      (list
  241.                         "带倾斜角的线性标注类型有可选组码 52。"
  242.       "当添加到线性标注的旋转角度(组码 50)时,将给出尺寸界线的角度"
  243.                      )
  244.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  245.                   )
  246.                )

  247.                (
  248.                   (and
  249.                      (= FLAG 15)
  250.                      (member SUBCLASS (list "AcDbRadialDimension" "AcDbDiametricDimension"))
  251.                   )
  252.                   (list
  253.                      (list
  254.                         "直径标注、半径标注和角度标注的定义点"
  255.                         "(WCS中): 3D点"
  256.                      )
  257.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  258.                   )
  259.                )
  260.                (
  261.                   (and
  262.                      (= FLAG 40)
  263.                      (member SUBCLASS (list "AcDbRadialDimension" "AcDbDiametricDimension"))
  264.                   )
  265.                   (list
  266.                      (list "半径标注和直径标注的引线长度")
  267.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  268.                   )
  269.                )

  270.                ((and (= FLAG 13) (= SUBCLASS "AcDb3PointAngularDimension"))
  271.                   (list
  272.                      (list
  273.                         "线性标注和角度标注的定义点"
  274.                         "(WCS中): 3D点"
  275.                      )
  276.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  277.                   )
  278.                )
  279.                ((and (= FLAG 14) (= SUBCLASS "AcDb3PointAngularDimension"))
  280.                   (list
  281.                      (list
  282.                         "线性标注和角度标注的定义点"
  283.                         "(WCS中): 3D点"
  284.                      )
  285.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  286.                   )
  287.                )
  288.                ((and (= FLAG 15) (= SUBCLASS "AcDb3PointAngularDimension"))
  289.                   (list
  290.                      (list
  291.                         "直径标注、半径标注和角度标注的定义点"
  292.                         "(WCS中): 3D点"
  293.                      )
  294.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  295.                   )
  296.                )
  297.                ((and (= FLAG 16) (= SUBCLASS "AcDb3PointAngularDimension"))
  298.                   (list
  299.                      (list
  300.                         "定义角度标注的标注圆弧的点"
  301.                         "(OCS中): 3D点"
  302.                      )
  303.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  304.                   )
  305.                )

  306.                ((and (= FLAG 13) (= SUBCLASS "AcDbOrdinateDimension"))
  307.                   (list
  308.                      (list
  309.                         "线性标注和角度标注的定义点"
  310.                         "(WCS中): 3D点"
  311.                      )
  312.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  313.                   )
  314.                )
  315.                ((and (= FLAG 14) (= SUBCLASS "AcDbOrdinateDimension"))
  316.                   (list
  317.                      (list
  318.                         "线性标注和角度标注的定义点"
  319.                         "(WCS中): 3D点"
  320.                      )
  321.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  322.                   )
  323.                )

  324.                (T (list nil nil nil nil nil))
  325.             )
  326.          )

  327.          ((= ENTITY_TYPE "LINE")
  328.             (cond
  329.                ((= FLAG 39)
  330.                   (list
  331.                      (list "厚度(选项; 缺省 = 0)")
  332.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  333.                   )
  334.                )
  335.                ((= FLAG 10)
  336.                   (list
  337.                      (list "起点(WCS中): 3D点")
  338.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  339.                   )
  340.                )
  341.                ((= FLAG 11)
  342.                   (list
  343.                      (list "终点(WCS中): 3D点")
  344.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  345.                   )
  346.                )
  347.                ((= FLAG 210)
  348.                   (list
  349.                      (list
  350.                         "拉伸方向(选项; 缺省 = 0, 0, 1): 3D矢量"
  351.                      )
  352.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  353.                   )
  354.                )
  355.                (T (list nil nil nil nil nil))
  356.             )
  357.          )

  358.          ((= ENTITY_TYPE "MTEXT")
  359.             (cond
  360.                ((= FLAG 10)
  361.                   (list
  362.                      (list "插入点 DXF: 3D点")
  363.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  364.                   )
  365.                )
  366.                ((= FLAG 40)
  367.                   (list (list "缺省文字高度")
  368.                   nil (cdr (assoc FLAG ENT_LIST)) nil)
  369.                )
  370.                ((= FLAG 41)
  371.                   (list
  372.                      (list "参照矩形宽度")
  373.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  374.                   )
  375.                )
  376.                ((= FLAG 71)
  377.                   (list
  378.                      (list "附着点")
  379.                      (list
  380.                         (list 1 2 3 4 5 6 7 8 9)
  381.                         (list
  382.                            "1\t左上"
  383.                            "2\t中上"
  384.                            "3\t右上"
  385.                            "4\t左中"
  386.                            "5\t正中"
  387.                            "6\t右中"
  388.                            "7\t左下"
  389.                            "8\t中下"
  390.                            "9\t右下a"
  391.                         )
  392.                      )
  393.                      nil nil nil
  394.                   )
  395.                )
  396.                ((= FLAG 72)
  397.                   (list
  398.                      (list "图形方向")
  399.                      (list
  400.                         (list 1 2 3 4)
  401.                         (list
  402.                            "1\t从左至右"
  403.                            "2\t从右至左"
  404.                            "3\t从上到下"
  405.                            "4\t从下到上"
  406.          "5\t随式样"
  407.                         )
  408.                      )
  409.                      nil nil nil
  410.                   )
  411.                )
  412.                ((= FLAG 1)
  413.                   (list
  414.                      (list
  415.                         "字符串。如果字符串长度小于250个字符,所有字符均出现在组1中。"
  416.       "如果字符串长度大于250个字符,该字符串将分成长度为250个字符的数据块"
  417.       "并显示在一个或多个组3代码中。如果使用组3代码,最后一个组将是组1 且字符数少于250个"
  418.                      )
  419.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  420.                   )
  421.                )
  422.                ((= FLAG 3)
  423.                   (list
  424.                      (list "附加文字(始终在长度为 250 个字符的数据块中).")
  425.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  426.                   )
  427.                )
  428.                ((= FLAG 7)
  429.                   (list
  430.                      (list "文字样式名(如果未提供,则为: STANDARD)")
  431.                      (list TXTSTYLE_LIST TXTSTYLE_LIST) nil nil nil
  432.                   )
  433.                )
  434.                ((= FLAG 210)
  435.                   (list
  436.                      (list "拉伸方向(选项; 缺省 = 0, 0, 1): 3D矢量")
  437.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  438.                   )
  439.                )
  440.                ((= FLAG 11)
  441.                   (list
  442.                      (list "方向矢量(WCS中): 3D矢量.")
  443.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  444.                   )
  445.                )
  446.                ((= FLAG 42)
  447.                   (list
  448.                      (list
  449.                         "构成多行文字图元的字符的水平宽度"
  450.       "该值始终等于或小于组码41的值"
  451.                      )
  452.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  453.                   )
  454.                )
  455.                ((= FLAG 43)
  456.                   (list
  457.                      (list "多行文字图元的垂直高度")
  458.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  459.                   )
  460.                )
  461.                ((= FLAG 50)
  462.                   (list
  463.                      (list "以弧度为单位的旋转角度")
  464.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  465.                   )
  466.                )
  467.                (T (list nil nil nil nil nil))
  468.             )
  469.          )

  470.          ((= ENTITY_TYPE "TEXT")
  471.             (cond
  472.                ((= FLAG 39)
  473.                   (list
  474.                      (list "厚度(选项; 缺省 = 0)")
  475.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  476.                   )
  477.                )
  478.                ((= FLAG 10)
  479.                   (list
  480.                      (list "第一对齐点(OCS中): 3D点")
  481.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  482.                   )
  483.                )
  484.                ((= FLAG 40) (list (list "文字高度") nil (cdr (assoc FLAG ENT_LIST)) nil))
  485.                ((= FLAG 1)
  486.                   (list
  487.                      (list "默认值(字符串本身)")
  488.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  489.                   )
  490.                )
  491.                ((= FLAG 50)
  492.                   (list
  493.                      (list "文字旋转角度(选项, 缺省 = 0)")
  494.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  495.                   )
  496.                )
  497.                ((= FLAG 41)
  498.                   (list
  499.                      (list
  500.                         "相对X缩放比例: 宽度(选项; 缺省 = 1)."
  501.                         "使用拟合类型的文字时, 该值也将进行调整"
  502.                      )
  503.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  504.                   )
  505.                )
  506.                ((= FLAG 51)
  507.                   (list
  508.                      (list "倾斜角(选项, 缺省 = 0)")
  509.                      nil (cdr (assoc FLAG ENT_LIST)) nil nil
  510.                   )
  511.                )
  512.                ((= FLAG 7)
  513.                   (list
  514.                      (list "文字样式名(选项, 缺省 = STANDARD)")
  515.                      (list TXTSTYLE_LIST TXTSTYLE_LIST) nil nil nil
  516.                   )
  517.                )
  518.                ((= FLAG 71)
  519.                   (list
  520.                      (list
  521.                         "文字生成标志(选项, 缺省 = 0)"
  522.                         "2 = 文字反向(在X轴方向镜像), 4 = 文字倒置(在Y轴方向镜像)"
  523.                      )
  524.                      nil nil nil (list (cdr (assoc FLAG ENT_LIST)) (list 2 4))
  525.                   )
  526.                )
  527.                ((= FLAG 72)
  528.                   (list
  529.                      (list
  530.                         "文字水平对正类型(选项, 缺省 = 0)"
  531.                         "整数代码(非按位编码)"
  532.                      )
  533.                      (list
  534.                         (list 0 1 2 3 4 5)
  535.                         (list
  536.                            "0\t左对正"
  537.                            "1\t居中对正"
  538.                            "2\t右对正"
  539.                            "3\t对齐(如果垂直对齐 = 0)"
  540.                            "4\t中间(如果垂直对齐 = 0)"
  541.                            "5\t拟合(如果垂直对齐 = 0)"
  542.                         )
  543.                      )
  544.                      nil nil nil
  545.                   )
  546.                )
  547.                ((= FLAG 11)
  548.                   (list
  549.                      (list
  550.                         "第二对齐点(OCS中): 3D点. 只有当72或73组的值非零时,该值才有意义"
  551.                         "(如果对正不是基线对正/左对正)"
  552.                      )
  553.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  554.                   )
  555.                )
  556.                ((= FLAG 210)
  557.                   (list
  558.                      (list "拉伸方向(选项; 缺省 = 0, 0, 1): 3D矢量")
  559.                      nil nil (cdr (assoc FLAG ENT_LIST)) nil
  560.                   )
  561.                )
  562.                ((= FLAG 73)
  563.                   (list
  564.                      (list
  565.                         "文字垂直对正类型(选项, 缺省 = 0)"
  566.                         "整数代码(不是按位编码)"
  567.                      )
  568.                      (list
  569.                         (list 0 1 2 3)
  570.                         (list
  571.                            "0\t基线对正"
  572.                            "1\t底端对正"
  573.                            "2\t居中对正"
  574.                            "3\t顶端对正"
  575.                         )
  576.                      )
  577.                      nil nil nil
  578.                   )
  579.                )
  580.                (T (list nil nil nil nil nil))
  581.             )
  582.          )

  583.          (T (list nil nil nil nil nil))
  584.       )
  585.    )

  586.    (defun PICK_ENT ( / ENT )
  587.       (if (= LEVEL_FLAG "0")
  588.          (setq ENT (entsel))
  589.          (setq ENT (nentsel))
  590.       )
  591.       (if (null ENT)
  592.          (progn
  593.             (alert "没有实体选择")
  594.             (setq NEXT_ENT nil)
  595.          )
  596.          (progn
  597.             (setq NEXT_ENT (entnext (car ENT)))
  598.             (setq ENT_LIST (entget (car ENT)))
  599.          )
  600.       )
  601.    )

  602.   (setq ACADLIBTEMP "C:\\Documents and Settings\\Administrator\\Application Data")

  603.    (defun SHOW_LIST ( / FHANDLE ITEM POINTER )
  604.       (setq FHANDLE (open (strcat ACADLIBTEMP "/DXF.TXT") "w"))
  605.       (setq POINTER 0)
  606.       (while (setq ITEM (nth POINTER ENT_LIST))
  607.          (prin1 ITEM FHANDLE)
  608.          (write-line "" FHANDLE)
  609.          (setq POINTER (1+ POINTER))
  610.       )
  611.       (close FHANDLE)
  612.       (setq FHANDLE (open (strcat ACADLIBTEMP "/DXF.TXT") "r"))
  613.       (setq OUTPUT_LIST nil)
  614.       (while (setq ITEM (read-line FHANDLE))
  615.          (setq OUTPUT_LIST (append OUTPUT_LIST (list item)))
  616.       )
  617.       (close FHANDLE)

  618.       (start_list "output_list")
  619.       (mapcar 'add_list OUTPUT_LIST)
  620.       (end_list)

  621.       (setq ENTITY_TYPE (cdr (assoc 0 ENT_LIST)))
  622.       (set_tile "entity_type" ENTITY_TYPE)
  623.       (set_tile "flag" "")
  624.       (set_tile "subclass_type" "")
  625.       (set_tile "flag_descr_01" "")
  626.       (set_tile "flag_descr_02" "")
  627.    )

  628.    (defun SHOW_NEXT_ENT ()
  629.       (setq
  630.          ENT NEXT_ENT
  631.          ENT_LIST (entget ENT)
  632.          NEXT_ENT (entnext ENT)
  633.       )
  634.       (show_list)
  635.       (reset_values)
  636.    )

  637.    (defun RESET_VALUES ()
  638.       (start_list "popup_value")
  639.       (end_list)
  640.       (set_tile "editbox_value" "")
  641.       (set_tile "x_point" "")
  642.       (set_tile "y_point" "")
  643.       (set_tile "z_point" "")
  644.       (mode_tile "popup_value" 1)
  645.       (mode_tile "editbox_value" 1)
  646.       (mode_tile "x_point" 1)
  647.       (mode_tile "y_point" 1)
  648.       (mode_tile "z_point" 1)
  649.       (mode_tile "go_subst" 1)
  650.       (mode_tile "bit_1" 1)
  651.       (mode_tile "bit_2" 1)
  652.       (mode_tile "bit_4" 1)
  653.       (mode_tile "bit_8" 1)
  654.       (mode_tile "bit_16" 1)
  655.       (mode_tile "bit_32" 1)
  656.       (mode_tile "bit_64" 1)
  657.       (mode_tile "bit_128" 1)
  658.    )

  659.    (defun SHOW_FEATURES
  660.       (
  661.          LIST_POINTER
  662.          /
  663.          DESCR_01 DESCR_02 ITEM POINTER RET_LIST SUBCLASS BITS_VALUE BITS_RANGE
  664.          COUNTER TILE_NAME TILE_VALUE OLD_BITS_VALUE
  665.       )

  666.       (setq POINTER LIST_POINTER)
  667.       (while (and (> POINTER 0) (null SUBCLASS))
  668.          (setq ITEM (nth POINTER ENT_LIST))
  669.          (if (= (car ITEM) 100)
  670.             (setq SUBCLASS (cdr ITEM))
  671.          )
  672.          (setq POINTER (1- POINTER))
  673.       )

  674.       (setq
  675.          SELECTED_ITEM (nth LIST_POINTER ENT_LIST)
  676.          FLAG (car SELECTED_ITEM)
  677.          RET_LIST (get_features ENTITY_TYPE FLAG SUBCLASS)
  678.          DESCR_01 (car (nth 0 RET_LIST))
  679.          DESCR_02 (cadr (nth 0 RET_LIST))
  680.       )

  681.       (set_tile "flag" (itoa FLAG))
  682.       (if SUBCLASS
  683.          (set_tile "subclass_type" SUBCLASS)
  684.          (set_tile "subclass_type" "")
  685.       )
  686.       (if DESCR_01
  687.          (set_tile "flag_descr_01" DESCR_01)
  688.          (set_tile "flag_descr_01" "")
  689.       )
  690.       (if DESCR_02
  691.          (set_tile "flag_descr_02" DESCR_02)
  692.          (set_tile "flag_descr_02" "")
  693.       )

  694.       (reset_values)
  695.       (cond
  696.          ((setq RANGE_LISTS (nth 1 RET_LIST))
  697.             (start_list "popup_value")
  698.             (mapcar 'add_list (cadr RANGE_LISTS))
  699.             (end_list)
  700.             (mode_tile "popup_value" 0)
  701.             (set_tile
  702.                "popup_value"
  703.                (itoa
  704.                   (-
  705.                      (length (car RANGE_LISTS))
  706.                      (length (member (cdr SELECTED_ITEM) (car RANGE_LISTS)))
  707.                   )
  708.                )
  709.             )
  710.             (action_tile
  711.                "popup_value"
  712.                "(mode_tile \"go_subst\" 0)
  713.                 (setq NEW_ITEM (cons FLAG (nth (atoi $value) (car RANGE_LISTS))))"
  714.             )
  715.          )

  716.          ((setq EDITBOX_VALUE (nth 2 RET_LIST))
  717.             (mode_tile "editbox_value" 0)
  718.             (cond
  719.                ((= (type EDITBOX_VALUE) 'STR)
  720.                   (progn
  721.                      (set_tile "editbox_value" EDITBOX_VALUE)
  722.                      (action_tile
  723.                         "editbox_value"
  724.                         "(mode_tile \"go_subst\" 0)
  725.                          (setq NEW_ITEM (cons FLAG $value))"
  726.                      )
  727.                   )
  728.                )
  729.                ((= (type EDITBOX_VALUE) 'INT)
  730.                   (progn
  731.                      (set_tile "editbox_value" (itoa EDITBOX_VALUE))
  732.                      (action_tile
  733.                         "editbox_value"
  734.                         "(mode_tile \"go_subst\" 0)
  735.                          (setq NEW_ITEM (cons FLAG (atoi $value)))"
  736.                      )
  737.                   )
  738.                )
  739.                ((= (type EDITBOX_VALUE) 'REAL)
  740.                   (progn
  741.                      (set_tile "editbox_value" (rtos EDITBOX_VALUE 2 16))
  742.                      (action_tile
  743.                         "editbox_value"
  744.                         "(mode_tile \"go_subst\" 0)
  745.                          (setq NEW_ITEM (cons FLAG (atof $value)))"
  746.                      )
  747.                   )
  748.                )
  749.             )
  750.          )

  751.          ((setq POINT_3D (nth 3 RET_LIST))
  752.             (mode_tile "x_point" 0)
  753.             (mode_tile "y_point" 0)
  754.             (mode_tile "z_point" 0)
  755.             (set_tile "x_point" (rtos (car POINT_3D) 2 16))
  756.             (set_tile "y_point" (rtos (cadr POINT_3D) 2 16))
  757.             (set_tile "z_point" (rtos (caddr POINT_3D) 2 16))
  758.             (action_tile
  759.                "x_point"
  760.                "(mode_tile \"go_subst\" 0)
  761.                 (setq NEW_ITEM (list FLAG (atof $value) (nth 1 POINT_3D) (nth 2 POINT_3D)))"
  762.             )
  763.             (action_tile
  764.                "y_point"
  765.                "(mode_tile \"go_subst\" 0)
  766.                 (setq NEW_ITEM (list FLAG (nth 0 POINT_3D) (atof $value) (nth 2 POINT_3D)))"
  767.             )
  768.             (action_tile
  769.                "z_point"
  770.                "(mode_tile \"go_subst\" 0)
  771.                 (setq NEW_ITEM (list FLAG (nth 0 POINT_3D) (nth 1 POINT_3D) (atof $value)))"
  772.             )
  773.          )

  774.          ((setq BITS_FLAG (nth 4 RET_LIST))
  775.             (setq
  776.                BITS_VALUE (car BITS_FLAG)
  777.                OLD_BITS_VALUE BITS_VALUE
  778.                BITS_RANGE (cadr BITS_FLAG)
  779.                TILES_NAME (list "bit_128" "bit_64" "bit_32" "bit_16" "bit_8" "bit_4" "bit_2" "bit_1")
  780.                TILES_VALUE (list 128 64 32 16 8 4 2 1)
  781.                COUNTER 0
  782.             )
  783.             (while (setq TILE_NAME (nth COUNTER TILES_NAME))
  784.                (setq TILE_VALUE (nth COUNTER TILES_VALUE))
  785.                (if (member TILE_VALUE BITS_RANGE)
  786.                   (progn
  787.                      (mode_tile TILE_NAME 0)
  788.                      (if (>= BITS_VALUE TILE_VALUE)
  789.                         (progn
  790.                            (setq BITS_VALUE (- BITS_VALUE TILE_VALUE))
  791.                            (set_tile TILE_NAME "1")
  792.                         )
  793.                         (set_tile TILE_NAME "0")
  794.                      )
  795.                   )
  796.                )
  797.                (setq COUNTER (1+ COUNTER))
  798.             )

  799.             (defun CALCULATE_BITS_SUM ( / BITS_SUM COUNTER TILE_NAME TILE_VALUE )
  800.                (setq
  801.                   BITS_SUM 0
  802.                   COUNTER 0
  803.                )
  804.                (while (setq TILE_NAME (nth COUNTER TILES_NAME))
  805.                   (setq TILE_VALUE (nth COUNTER TILES_VALUE))
  806.                   (if (member TILE_VALUE (cadr BITS_FLAG))
  807.                      (if (= (get_tile TILE_NAME) "1")
  808.                         (setq BITS_SUM (+ BITS_SUM TILE_VALUE))
  809.                      )
  810.                   )
  811.                   (setq COUNTER (1+ COUNTER))
  812.                )
  813.                (eval BITS_SUM)
  814.             )

  815.             (setq COUNTER 0)
  816.             (while (setq TILE_NAME (nth COUNTER TILES_NAME))
  817.                (action_tile
  818.                   TILE_NAME
  819.                   "(mode_tile \"go_subst\" 0) (setq NEW_ITEM (cons FLAG (calculate_bits_sum)))"
  820.                )
  821.                (setq COUNTER (1+ COUNTER))
  822.             )
  823.          )
  824.       )
  825.    )

  826.    (defun GO_SUBST ()
  827.       (setq ENT_LIST (subst NEW_ITEM SELECTED_ITEM ENT_LIST))
  828.       (entmod ENT_LIST)
  829.    )

  830.    (defun TILES_ONOFF ()
  831.       (if NEXT_ENT
  832.          (mode_tile "next_ent" 0)
  833.          (mode_tile "next_ent" 1)
  834.       )
  835.    )

  836.   (setq OLD_CMDECHO (getvar "CMDECHO"))
  837.    (setvar "CMDECHO" 0)

  838.    (setq LEVEL_FLAG "0")

  839.    (setq WHAT_NEXT 4)
  840.    (setq DCL_ID (load_dialog "dxf.dcl"))
  841.    (while (> WHAT_NEXT 1)
  842.       (if (not (new_dialog "dxf_main" DCL_ID)) (exit))

  843.       (set_tile "level" LEVEL_FLAG)
  844.       (action_tile "level" "(setq LEVEL_FLAG $value)")

  845.       (action_tile "pick_ent" "(done_dialog 2)")

  846.       (if ENT_LIST
  847.          (show_list)
  848.       )

  849.       (action_tile "next_ent" "(show_next_ent) (tiles_onoff)")

  850.       (action_tile "output_list" "(show_features (atoi $value))")

  851.       (action_tile "go_subst" "(done_dialog 3)")

  852.       (action_tile "accept" "(done_dialog 1)")

  853.       (reset_values)
  854.       (tiles_onoff)

  855.       (setq WHAT_NEXT (start_dialog))
  856.       (if (= WHAT_NEXT 2)
  857.          (pick_ent)
  858.       )
  859.       (if (= WHAT_NEXT 3)
  860.         (go_subst)
  861.       )
  862.    )

  863.    (setq *error* OLD_ERROR)
  864.    (if (> (getvar "UNDOCTL") 3)
  865.       (command "_.Undo" "_End")
  866.    )
  867.    (setvar "CMDECHO" OLD_CMDECHO)
  868.    (princ)
  869. )

  870. (princ "DXF加载.")
  871. (princ)


  1. dcl_settings :default_dcl_settings
  2. {
  3.   audit_level = 0;
  4. }

  5. dxf_main :dialog
  6. {
  7.   label = "DXF组码提取";
  8.   :row
  9.   {
  10.     :column
  11.     {
  12.       :list_box
  13.       {
  14.         label           = "输出屏";
  15.         key             = "output_list";
  16.         width           = 45;
  17.         height          = 35;
  18.       }
  19.     }
  20.     :column
  21.     {
  22.       :row
  23.       {
  24.         :popup_list
  25.         {
  26.           label         = "层次:";
  27.           mnemonic      = "L";
  28.           key           = "level";
  29.           list          = "ENTSEL(直接实体)\nNENTSEL(嵌套实体)";
  30.           edit_width    = 25;
  31.         }
  32.         :button
  33.         {
  34.           label         = "选取实体 <";
  35.           mnemonic      = "P";
  36.           key           = "pick_ent";
  37.         }
  38.         :button
  39.         {
  40.           label         = "下一实体";
  41.           mnemonic      = "N";
  42.           key           = "next_ent";
  43.         }
  44.       }
  45.       :row
  46.       {
  47.         :row
  48.         {
  49.           fixed_width   = true;
  50.           :boxed_row
  51.           {
  52.             label       = "实体";
  53.             :text
  54.             {
  55.               key       = "entity_type";
  56.               width     = 12;
  57.             }
  58.           }
  59.           :boxed_row
  60.           {
  61.             label       = "标记";
  62.             :text
  63.             {
  64.               key       = "flag";
  65.               width     = 4;
  66.             }
  67.           }
  68.           :boxed_row
  69.           {
  70.             label       = "子类";
  71.             :text
  72.             {
  73.               key       = "subclass_type";
  74.               width     = 25;
  75.             }
  76.           }
  77.         }
  78.         :button
  79.         {
  80.           label         = "替换";
  81.           mnemonic      = "S";
  82.           key           = "go_subst";
  83.         }
  84.       }
  85.       :boxed_column
  86.       {
  87.         label           = "描述";
  88.         :text
  89.         {
  90.           key           = "flag_descr_01";
  91.         }
  92.         :text
  93.         {
  94.           key           = "flag_descr_02";
  95.         }
  96.       }
  97.       :boxed_column
  98.       {
  99.         label           = "替换";
  100.         :popup_list
  101.         {
  102.           label         = "值:";
  103.           mnemonic      = "V";
  104.           key           = "popup_value";
  105.           tabs          = "5";
  106.           edit_width    = 63;
  107.         }
  108.         :edit_box
  109.         {
  110.           label         = "值:";
  111.           mnemonic      = "V";
  112.           key           = "editbox_value";
  113.           edit_width    = 63;
  114.         }
  115.         :row
  116.         {
  117.           :edit_box
  118.           {
  119.             label       = "X:";
  120.             mnemonic    = "X";
  121.             key         = "x_point";
  122.             width       = 18;
  123.             edit_width  = 16;
  124.             fixed_width = true;
  125.           }
  126.           :edit_box
  127.           {
  128.             label       = "Y:";
  129.             mnemonic    = "Y";
  130.             key         = "y_point";
  131.             width       = 18;
  132.             edit_width  = 16;
  133.             fixed_width = true;
  134.           }
  135.           :edit_box
  136.           {
  137.             label       = "Z:";
  138.             mnemonic    = "Z";
  139.             key         = "z_point";
  140.             width       = 18;
  141.             edit_width  = 16;
  142.             fixed_width = true;
  143.           }
  144.         }
  145.         :row
  146.         {
  147.           :text
  148.           {
  149.             label       = "位:";
  150.           }
  151.           :toggle
  152.           {
  153.             label       = "1";
  154.             mnemonic    = "1";
  155.             key         = "bit_1";
  156.           }
  157.           :toggle
  158.           {
  159.             label       = "2";
  160.             mnemonic    = "2";
  161.             key         = "bit_2";
  162.           }
  163.           :toggle
  164.           {
  165.             label       = "4";
  166.             mnemonic    = "4";
  167.             key         = "bit_4";
  168.           }
  169.           :toggle
  170.           {
  171.             label       = "8";
  172.             mnemonic    = "8";
  173.             key         = "bit_8";
  174.           }
  175.           :toggle
  176.           {
  177.             label       = "16";
  178.             mnemonic    = "16";
  179.             key         = "bit_16";
  180.           }
  181.           :toggle
  182.           {
  183.             label       = "32";
  184.             mnemonic    = "32";
  185.             key         = "bit_32";
  186.           }
  187.           :toggle
  188.           {
  189.             label       = "64";
  190.             mnemonic    = "64";
  191.             key         = "bit_64";
  192.           }
  193.           :toggle
  194.           {
  195.             label       = "128";
  196.             mnemonic    = "128";
  197.             key         = "bit_128";
  198.           }
  199.         }
  200.       }
  201.       :space
  202.       {
  203.         height = 5;
  204.       }
  205.     }
  206.   }
  207.   spacer;
  208.   :row
  209.   {
  210.     fixed_width         = true;
  211.     alignment           = centered;
  212.     :button
  213.     {
  214.       label             = "关闭";
  215.       mnemonic          = "C";
  216.       key               = "cancel";
  217.       width             = 8;
  218.       is_cancel         = true;
  219.     }
  220.   }
  221. }

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2023-2-28 20:19 | 显示全部楼层
  1. Command: dxf
  2. Select object: ; error: bad argument type: FILE nil
复制代码
发表于 2018-8-19 12:48 | 显示全部楼层
代码好长看得晕乎,支持感谢楼主分享!
发表于 2011-9-5 22:37 | 显示全部楼层
必须支持.....
发表于 2011-9-5 23:05 | 显示全部楼层
设置一下ACADLIBTEMP路径如
(setq ACADLIBTEMP "C:")
发表于 2011-9-6 00:34 | 显示全部楼层
好长的代码,晕~~~~
发表于 2011-9-6 00:37 | 显示全部楼层
  ding yi xia
zai kan
 楼主| 发表于 2011-9-6 06:24 | 显示全部楼层
xshrimp 发表于 2011-9-5 23:05
设置一下ACADLIBTEMP路径如
(setq ACADLIBTEMP "C:")

谢谢!我已经加上了。这是一个庞大的软件中的一个程序,调用了初始化的ACADLIBTEMP。这个值本来设置在注册表中,我现在把它提取出来,见程序中第624行。(setq ACADLIBTEMP "C:\\Documents and Settings\\Administrator\\Application Data")
发表于 2011-9-6 08:36 | 显示全部楼层
选择对象: ; 错误: 参数类型错误: FILE nil
??
 楼主| 发表于 2011-9-6 20:39 | 显示全部楼层
qjcpj 发表于 2011-9-6 08:36
选择对象: ; 错误: 参数类型错误: FILE nil
??

你选择了什么?
发表于 2011-9-22 12:40 | 显示全部楼层
.
; 警告: 用作函数的局部变量: SHOW_LIST
; 警告: 用作函数的局部变量: RESET_VALUES
; 警告: 用作函数的局部变量: TILES_ONOFF
; 警告: 用作函数的局部变量: PICK_ENT
发表于 2011-9-22 12:52 | 显示全部楼层
严重支持   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 06:28 , Processed in 1.223488 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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