明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2901|回复: 11

请教关于打散合并属性块的问题

[复制链接]
发表于 2014-9-30 09:50:11 | 显示全部楼层 |阅读模式
  1. 普通浏览复制代码
  2. ;;;;;南方CASS的地形点是用的属性块,他有打散和合并功能,不知是如何实现的
  3. ;;;;;我现在用了一种办法但感觉实在是太笨了!请教哪位大侠能指教并帮助优化!
  4. ;;;;;以下是我的代码:

  5.   (vl-load-com)
  6. ;;;打散
  7. (defun c:DSKY (/ bl blc blxs ZG s n s0 s1 d1 m k jd b)
  8.   (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  9.   (setq  bl (* blxs 0.4) ZG (* 2.0 blxs))
  10.   (setq s (ssget))
  11.   (setq n (sslength s) m 0)
  12.   (repeat n
  13.     (setq s0 (ssname s m) m (+ m 1) k 0)
  14.     (setq s1 (entget s0 (list "SOUTH")))
  15.     (setq d1 (cdr(assoc 10 s1)))
  16.     (setq JD (cdr(assoc 50 s1)))
  17.     (setq  b (cdadr (cadr (assoc -3 s1))))
  18.     (setq  b (vl-princ-to-string b))
  19.     (setq  b (vl-string-translate "" "" B))
  20.     (cond ((= b "202101")(setq height (last d1))
  21.      (command "_.erase" s0 "")
  22.      (MKINSERT d1 bl bl bl JD "202101")
  23.      (MKTEXTA d1 ZG JD (rtos height 2 2) "202111")
  24.     )
  25.     ((= b "186400")(setq H (rtos (last d1) 2 1))
  26.      (command "_.erase" s0 "")
  27.      (setq k (vl-string-search "." h))
  28.      (setq h1 (substr h 1 k) h2 (substr h (+ k 2) 1))
  29.      (MKINSERT d1 bl bl bl JD "186400")
  30.      (MKTEXTB d1 ZG JD h1 "186411")
  31.      (MKTEXTC d1 ZG JD h2 "186412")
  32.     )
  33.     )
  34.   )
  35. )
  36. ;;;合并
  37. (defun c:HBKY (/ bl blc blxs ZG lay s n s0 s1 d1 m k jd b)
  38.   (command "layer" "m" "GCD" "c" "1" "" "L" "CONTINUOUS" ""  "")
  39.   (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  40.   (setq  bl (* blxs 0.4) ZG (* 2.0 blxs))
  41.   (setq s (ssget))
  42.   (setq n (sslength s) m 0)(print "n=")(princ n)(princ)
  43.   (repeat n
  44.     (setq  s0 (ssname s m) m (+ m 1) k 0)
  45.     (setq  s1 (entget s0 (list "SOUTH")))
  46.     (setq lay (cdr(assoc 8 s1)))
  47.     (setq   e (cdr (assoc 0 s1)))
  48.     (if (and(= e "TEXT")(= lay "GCD"))(command "erase" s0 ""))
  49.     (if (and(= e "INSERT")(= lay "GCD"))(progn
  50.        (setq d1 (cdr(assoc 10 s1)))
  51.        (setq JD (cdr(assoc 50 s1)))
  52.        (setq  b (cdadr (cadr (assoc -3 s1))))
  53.        (setq  b (vl-princ-to-string b))
  54.        (setq  b (vl-string-translate "" "" B))
  55.        (cond ((= b "202101")(setq height (rtos (last d1) 2 2))
  56.               (command "_.erase" s0 "")
  57.         (MINSERTAA d1 (/ bl 2.0) height)
  58.        )
  59.        ((= b "186400")(setq H (rtos (last d1) 2 1))
  60.         (command "_.erase" s0 "")
  61.         (setq k (vl-string-search "." h))
  62.         (setq h1 (substr h 1 k) h2 (substr h (+ k 2) 1))
  63.         (MINSERTSS d1 (/ bl 2.0) JD h1 h2)
  64.        )
  65.        )
  66.      ))
  67.   )
  68. )
  69. ;;插入块打散后用
  70. (defun MKINSERT (PT SX SY SSZ ZJ DATA)
  71.   (entmake (list '(0 . "INSERT")
  72.                  '(100 . "AcDbBlockReference")
  73.                  (cons 2 "GC200")
  74.                  (cons 8 "GCD")
  75.                  (cons 10 PT)
  76.                  (cons 41 SX)
  77.                  (cons 42 SY)
  78.                  (cons 43 SSZ)
  79.                  (cons 50 ZJ)
  80.                  (list -3 (list "SOUTH" (cons 1000 DATA)))
  81.             )
  82.   )
  83. )
  84. ;;;写文字岸上点打散后用
  85. (defun MKTEXTA (PT HEI ANG STR DATA / PTX TOBJ)
  86.     (setq pty (polar pt ANG 0.5))
  87.     (entmake (list '(0 . "TEXT")
  88.                    (cons 7 "HZ")
  89.                    (cons 8 "GCD")      
  90.                    (cons 10 PT)
  91.                    (cons 40 HEI) ;;字高
  92.                    (cons 41 0.8)      
  93.                    (cons 50 ANG)
  94.                    (cons 1 STR)
  95.                    (cons 72 0)  ;;左对齐
  96.                    (cons 73 2)
  97.                    (cons 11 pty)
  98.                   (list -3 (list "SOUTH" (cons 1000 DATA)))
  99.               )
  100.     )
  101. )
  102. ;;;写文字水下点左打散后用
  103. (defun MKTEXTB (PT HEI ANG STR DATA / PTz TOBJ)
  104.     (setq ptz (polar pt ANG -0.3))
  105.     (entmake (list '(0 . "TEXT")
  106.                    (cons 7 "HZ")
  107.                    (cons 8 "GCD")      
  108.                    (cons 10 PT)
  109.                    (cons 40 HEI) ;;字高
  110.                    (cons 41 0.8)      
  111.                    (cons 50 ANG)
  112.                    (cons 1 STR)
  113.                    (cons 11 ptz)
  114.                    (cons 72 2)  ;;右对齐
  115.                    (cons 73 0)
  116.                    (list -3 (list "SOUTH" (cons 1000 DATA)))
  117.               )
  118.     )
  119. )
  120. ;;;写文字水下点右打散后用
  121. (defun MKTEXTC (PT HEI ANG STR DATA / PTy TOBJ)
  122.     (setq pty (polar pt ANG 0.2))
  123.     (entmake (list '(0 . "TEXT")
  124.                    (cons 7 "HZ")
  125.                    (cons 8 "GCD")      
  126.                    (cons 10 PTy)
  127.                    (cons 40 HEI) ;;字高
  128.                    (cons 41 0.8)      
  129.                    (cons 50 ANG)
  130.                    (cons 1 STR)
  131.                   (cons 11 pty)
  132.                   (cons 72 0)  ;;左对齐
  133.                   (cons 73 0)
  134.                  (list -3 (list "SOUTH" (cons 1000 DATA)))
  135.               )
  136.     )
  137. )

  138. ;;;插入块(岸上点)合并用
  139. (defun MINSERTAA (inspt scale height / pt)
  140.   (setq pt (polar inspt 0 (* 1.2 scale)))
  141.   (entmake (list
  142.              '(0 . "INSERT")
  143.              '(100 . "AcDbEntity")
  144.              '(100 . "AcDbBlockReference")
  145.              '(66 . 1);;;属性跟随标志,1跟随,0不跟随
  146.              (cons 2 "GC200")
  147.              (cons 10 inspt)
  148.              (cons 41 scale)
  149.              (cons 42 scale)
  150.              (cons 43 scale)
  151.              '(-3 ("SOUTH" (1000 . "202101")))
  152.            )
  153.   )
  154.   ;;;插入属性
  155.     (entmake (list
  156.             '(0 . "ATTRIB")
  157.             '(100 . "AcDbEntity")
  158.             '(100 . "AcDbText")
  159.            (cons 10 pt)
  160.             (cons 40 (* 10.0 scale))
  161.             (cons 50 0)
  162.             (cons 41 0.8)
  163.             (cons 51 0)
  164.             (cons 1 height)
  165.             (cons 7 "HZ")
  166.             (cons 72 0)
  167.             (cons 11 pt)
  168.             '(100 . "AcDbAttribute")
  169.             (cons 2 "height")
  170.             (cons 70 0)
  171.             (cons 74 2)
  172.            )
  173.     )
  174.            ;;;结束标志
  175.           (entmake '((0 . "SEQEND")))
  176.            (princ)
  177.   )
  178. ;;;插入块(水下点)合并用
  179. (defun MINSERTSS (inspt scale JD integer decimal / pt ptz pty)
  180.   (setq pt (polar inspt 0 (* 1.2 scale)))
  181.   (setq ptz (polar pt jd -0.4))
  182.   (setq pty (polar pt jd 0.2))
  183.   (entmake (list
  184.              '(0 . "INSERT")
  185.              '(100 . "AcDbEntity")
  186.              '(100 . "AcDbBlockReference")
  187.              '(66 . 1);;;属性跟随标志,1跟随,0不跟随
  188.              (cons 2 "GC200")
  189.              (cons 10 inspt)
  190.              (cons 41 scale)
  191.              (cons 42 scale)
  192.              (cons 43 scale)
  193.             (cons 50 JD)
  194.              '(-3 ("SOUTH" (1000 . "186400")))
  195.            )
  196.   )
  197.   ;;;插入属性
  198.     (entmake (list
  199.             '(0 . "ATTRIB")
  200.             '(100 . "AcDbEntity")
  201.             '(100 . "AcDbText")
  202.             (cons 10 pt)
  203.             (cons 40 (* 10.0 scale))
  204.             (cons 50 JD)
  205.             (cons 41 0.8)
  206.             (cons 51 0)
  207.             (cons 1 integer)
  208.             (cons 7 "HZ")
  209.             (cons 72 2)  ;;右对齐
  210.             (cons 11 ptz)
  211.             '(100 . "AcDbAttribute")
  212.             (cons 2 "integer")
  213.             (cons 70 0)
  214.            (cons 73 2)
  215.             (cons 74 1)
  216.            )
  217.     )
  218.     (entmake (list
  219.             '(0 . "ATTRIB")
  220.             '(100 . "AcDbEntity")
  221.             '(100 . "AcDbText")
  222.       (cons 10 pt)
  223.             (cons 40 (* 10.0 scale))
  224.             (cons 50 JD)
  225.             (cons 41 0.8)
  226.             (cons 51 0)
  227.             (cons 1 decimal)
  228.             (cons 7 "HZ")
  229.             (cons 72 0) ;;左对齐
  230.             (cons 11 pty)
  231.             '(100 . "AcDbAttribute")
  232.             (cons 2 "decimal")
  233.             (cons 70 0)
  234.            (cons 73 2)
  235.             (cons 74 1)
  236.            )
  237.     )
  238.            ;;;结束标志
  239.           (entmake '((0 . "SEQEND")))
  240.            (princ)
  241.   )
发表于 2014-9-30 12:11:55 | 显示全部楼层
是ARX的要不要?[em0]
  1.     static void xlCassGCDExplode_TEST(void)
  2.     {
  3.         ads_name ent, ss, ssName;
  4.         AcDbObjectId entId;
  5.         AcDbEntity *pEnt = NULL;

  6.         struct resbuf *rb;
  7.         rb = acutBuildList(RTDXF0, TEXT("INSERT"), 2, TEXT("GC200"), RTNONE);
  8.         int rt = acedSSGet(TEXT("X"), NULL, NULL, rb, ss);
  9.         // int rt = acedSSGet(NULL, NULL, NULL, rb, ss);
  10.         if (rt != RTNORM)
  11.         {
  12.             acutRelRb(rb);
  13.             return;
  14.         }
  15.         acutRelRb(rb);

  16.         // 新建图层
  17.         CString newLayerName = TEXT("newGCD");
  18.         AcDbObjectId layerId = GetLayerId(newLayerName);
  19.         if (!layerId.isValid())
  20.         {
  21.             Add(newLayerName, 4);
  22.         }
  23.         CString strHeight;
  24.         long len;
  25.         acedSSLength(ss, &len);
  26.         for (int i = 0; i < len; i++)
  27.         {
  28.             acedSSName(ss, i, ssName);
  29.             acdbGetObjectId(entId, ssName);
  30.             acdbOpenObject(pEnt, entId, AcDb::kForWrite);
  31.             if (pEnt->isKindOf(AcDbBlockReference::desc()))
  32.             {
  33.                 AcDbBlockReference *pBlk = AcDbBlockReference::cast(pEnt);
  34.                 AcGePoint3d pt = pBlk->position();
  35.                 int color = pBlk->colorIndex();
  36.                 CString layerName = pBlk->layer();
  37.                 AcGeScale3d scale = pBlk->scaleFactors();

  38.                 AcDbObjectIterator *pAttrIter = pBlk->attributeIterator();
  39.                 AcDbAttribute *pAttr;
  40.                 AcDbObjectId attrObjId;
  41.                 for(int k = 0; !pAttrIter->done(); pAttrIter->step())
  42.                 {
  43.                     attrObjId = pAttrIter->objectId();
  44.                     acdbOpenObject(pAttr,attrObjId, AcDb::kForWrite);
  45.                     CString pTagStr = pAttr->tag();
  46.                     // acutDelString(pTagStr);
  47.                     CString testStr = pAttr->textString();                        // 获取文字字符串
  48.                     AcGePoint3d alignmentPt = pAttr->alignmentPoint();            // 获取对象的对齐点
  49.                     AcGePoint3d insertionPt = pAttr->position();                  // 获取对象的插入点
  50.                     AcDb::TextHorzMode pHorizontalStr = pAttr->horizontalMode();  // 获取对象水平模式
  51.                     AcDb::TextVertMode pVerticalStr = pAttr->verticalMode();      // 获取对象垂直对齐模式
  52.                     double height = pAttr->height();                              // 获取对象的高度
  53.                     double width = pAttr->widthFactor();                          // 取得对象的宽度比例
  54.                     double rotAng = pAttr->rotation();                            // 获取对象的旋转角度
  55.                     AcDbObjectId style = pAttr->textStyle();                      // 获取对象的样式名称

  56.                     AcDbVoidPtrArray pExps;
  57.                     if (pEnt->explode(pExps) == Acad::eOk)
  58.                     {
  59.                         AcDbEntity *pXEnt;
  60.                         for (int j = 0; j < pExps.length(); j++)
  61.                         {
  62.                             pXEnt = (AcDbEntity*)pExps.at(j);
  63.                             pXEnt->close();
  64.                         }
  65.                     }

  66.                     // 添加文字
  67.                     AcDbText *pText = new AcDbText(insertionPt, testStr, style, height, rotAng);
  68.                     pText->setLayer(layerName);
  69.                     pText->setHorizontalMode(pHorizontalStr);
  70.                     pText->setVerticalMode(pVerticalStr);
  71.                     pText->setPosition(insertionPt);
  72.                     pText->setAlignmentPoint(alignmentPt);
  73.                     pText->setWidthFactor(width);
  74.                     pText->setLayer(newLayerName);
  75.                     // pText->setColorIndex(4);

  76.                     CString appName = TEXT("SOUTH");
  77.                     struct resbuf *pRb;
  78.                     if (_tcscmp(pTagStr, TEXT("height")) == 0)
  79.                     {
  80.                         CString typeName = TEXT("202101");
  81.                         pRb = acutBuildList(AcDb::kDxfRegAppName, appName, AcDb::kDxfXdAsciiString, typeName, RTNONE);
  82.                         pText->setXData(pRb);
  83.                         acutRelRb(pRb);
  84.                     }
  85.                     else if (_tcscmp(pTagStr, TEXT("integer")) == 0)
  86.                     {
  87.                         CString typeName = TEXT("186411");
  88.                         pRb = acutBuildList(AcDb::kDxfRegAppName, appName, AcDb::kDxfXdAsciiString, typeName, RTNONE);
  89.                         pText->setXData(pRb);
  90.                         acutRelRb(pRb);
  91.                     }
  92.                     else if (_tcscmp(pTagStr, TEXT("decimal")) == 0)
  93.                     {
  94.                         CString typeName = TEXT("186412");
  95.                         pRb = acutBuildList(AcDb::kDxfRegAppName, appName, AcDb::kDxfXdAsciiString, typeName, RTNONE);
  96.                         pText->setXData(pRb);
  97.                         acutRelRb(pRb);
  98.                     }
  99.                     else
  100.                     {
  101.                         acutRelRb(pRb);
  102.                         acutPrintf(TEXT("\n无扩展数据"));
  103.                     }
  104.                     PostToModelSpace(pText);

  105.                     // 创建块参照对象
  106.                     CString blkName = TEXT("GC200");
  107.                     AcDbObjectId blkDefId = GetBlkDefId(blkName);
  108.                     AcDbBlockReference *pBlkRef = new AcDbBlockReference(pt, blkDefId);
  109.                     pBlkRef->setScaleFactors(scale);
  110.                     pBlkRef->setRotation(rotAng);
  111.                     pBlkRef->setLayer(newLayerName);
  112.                     // pBlkRef->setColorIndex(4);
  113.                     // 扩展数据
  114.                     if (_tcscmp(pTagStr, TEXT("height")) == 0)
  115.                     {
  116.                         struct resbuf *pRb;
  117.                         CString typeName = TEXT("202101");
  118.                         pRb = acutBuildList(AcDb::kDxfRegAppName, appName, AcDb::kDxfXdAsciiString, typeName, RTNONE);
  119.                         pBlkRef->setXData(pRb);
  120.                         acutRelRb(pRb);
  121.                     }
  122.                     else
  123.                     {
  124.                         struct resbuf *pRb;
  125.                         CString typeName = TEXT("186400");
  126.                         pRb = acutBuildList(AcDb::kDxfRegAppName, appName, AcDb::kDxfXdAsciiString, typeName, RTNONE);
  127.                         pBlkRef->setXData(pRb);
  128.                         acutRelRb(pRb);
  129.                     }
  130.                     PostToModelSpace(pBlkRef);

  131.                     // pEnt->erase();
  132.                     pAttr->close();
  133.                     k++;
  134.                 }
  135.                 delete pAttrIter;
  136.                 pBlk->close();
  137.             }
  138.             pEnt->close();
  139.         }
  140.         acedSSFree(ss);
  141.     }
复制代码

本帖子中包含更多资源

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

x
发表于 2014-9-30 12:19:11 | 显示全部楼层
速度估计比用lisp快

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-9-30 15:43:09 | 显示全部楼层
谢谢!快了好多倍!
 楼主| 发表于 2014-10-3 10:46:51 | 显示全部楼层

  1. ;;;;;南方CASS的地形点是用的属性块,他有打散和合并功能,不知是如何实现的(主要指算法)
  2. ;;;;;我现在用LISP写了有此功能的程序,展点,打散,合并等,经改动并与南方cass比较,
  3. ;;;;;运行速度几乎不相上下!现贴出来与大家交流探讨!
  4. ;;;;;以下是我的代码:
  5. (vl-load-com)
  6. ;;;地形展点主程序
  7. (defun c:ZGCD(/ bl fname blxs blc bl sw f pp pt JD y x h ha hb h1 h2 m)
  8.      (defun DSJ(PB)
  9.         (setq  PB (vl-string-translate "," " " PB))
  10.         (setq  PB (read (strcat "(" PB ")")))
  11.      )
  12.   (command "insert" "c:/cass80/blocks/gc200.dwg" (list 0 0 0) 1 1 0) ;;;在CASS环境下此句可不要
  13.   (command "erase" (entlast) "") ;;;在CASS环境下此句可不要
  14.   (regapp "SOUTH") ;;;在CASS环境下此句可不要
  15.   (command "layer" "m" "GCD" "c" "1" "" "L" "CONTINUOUS" ""  "")
  16.   (command "style" "HZ" "rs.shx,hztxt.shx" 0 1 0 "" "" "")
  17.   (setvar "userr1" 1000.0)
  18.   (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  19.   (setq  bl (* blxs 0.2))
  20.   ; (setq name (getfiled "输入文件名:" "" "DAT;TXT;*" 8))
  21.   (setq fname "F:/lsyy/dxd.dat")
  22. ; (setq sw (getreal "输入水位:"))
  23. ; (setq JD (getreal "输入水下点高文字旋转角:"))
  24.   (setq sw 34.58 jd (/ (* 35 pi) 180.0))
  25. ; (setq JD (/ (* JD pi) 180.0))
  26.   (setq pp nil)
  27.   (setq   f (open fname "r"))
  28.   (while
  29.     (setq pp (read-line f))
  30.     (if pp (progn
  31.        (setq pp (cdr(DSJ pp)))
  32.        (setq  y (car pp)  x (cadr pp) h (last pp))
  33.        (setq pt (list y x h))
  34.        (setq ha (rtos h 2 2) hb (rtos h 2 1))
  35.        (setq  m (vl-string-search "." hb))
  36.        (if (= m nil)(progn(setq hb (strcat hb ".0") m (vl-string-search "." hb))));;;在CASS环境下此句可不要
  37.        (cond ((>= h sw)(MINSERTA pt bl ha))
  38.              ((<  h sw)(setq h1 (substr hb 1 m) h2 (substr hb (+ m 2) 1))
  39.                        (MINSERTS pt bl JD h1 h2)
  40.              )
  41.        )     
  42.      ))  
  43.    )
  44.      (close f)
  45.      (command "zoom" "e")
  46. )
  47. ;;;打散
  48. (defun c:DSKY (/ bl blc blxs ZG s n s0 s1 d1 m k jd b)
  49.   (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  50.   (setq  bl (* blxs 0.4) ZG (* 2.0 blxs))
  51.   (setq s (ssget))
  52.   (setq n (sslength s) m 0)
  53.   (repeat n
  54.     (setq s0 (ssname s m) m (+ m 1) k 0)
  55.     (setq s1 (entget s0 (list "SOUTH")))
  56.     (setq d1 (cdr(assoc 10 s1)))
  57.     (setq JD (cdr(assoc 50 s1)))
  58.     (setq  b (cdadr (cadr (assoc -3 s1))))
  59.     (setq  b (vl-princ-to-string b))
  60.     (setq  b (vl-string-translate "" "" B))
  61.     (cond ((= b "202101")(setq height (last d1))
  62.      (MKINSERT d1 bl bl bl JD "202101")
  63.      (MKTEXTA d1 ZG JD (rtos height 2 2) "202111")
  64.     )
  65.     ((= b "186400")(setq H (rtos (last d1) 2 1))
  66.      (setq k (vl-string-search "." h))
  67.      (setq h1 (substr h 1 k) h2 (substr h (+ k 2) 1))
  68.      (MKINSERT d1 bl bl bl JD "186400")
  69.      (MKTEXTB d1 ZG JD h1 "186411")
  70.      (MKTEXTC d1 ZG JD h2 "186412")
  71.     )
  72.     )
  73.   )
  74.           (command "_.erase" s "")
  75. )
  76. ;;;合并
  77. (defun c:HBKY (/ bl blc blxs ZG lay s n s0 s1 d1 m k jd b STIME ETIME)
  78.   (command "layer" "m" "GCD" "c" "1" "" "L" "CONTINUOUS" ""  "")
  79.   (setq blc (getvar "userr1") blxs (/ blc 1000.0))
  80.   (setq  bl (* blxs 0.2) ZG (* 2.0 blxs))
  81.   (setq s (ssget))
  82.   (setq STIME (getvar "date"))
  83.   (setq n (sslength s) m 0)
  84.   (repeat n
  85.     (setq  s0 (ssname s m) m (+ m 1) k 0)
  86.     (setq  s1 (entget s0 (list "SOUTH")))
  87.     (setq lay (cdr(assoc 8 s1)))
  88.     (setq   e (cdr(assoc 0 s1)))
  89.     (if (and(= e "INSERT")(= lay "GCD"))(progn
  90.        (setq d1 (cdr(assoc 10 s1)))
  91.        (setq JD (cdr(assoc 50 s1)))
  92.        (setq  b (cdadr (cadr (assoc -3 s1))))
  93.        (setq  b (vl-princ-to-string b))
  94.        (setq  b (vl-string-translate "" "" B))
  95.        (cond ((= b "202101")(setq height (rtos (last d1) 2 2))
  96.         (MINSERTA d1 bl height)
  97.        )
  98.        ((= b "186400")(setq H (rtos (last d1) 2 1))
  99.         (setq k (vl-string-search "." h))
  100.         (setq h1 (substr h 1 k) h2 (substr h (+ k 2) 1))
  101.         (MINSERTS d1 bl JD h1 h2)
  102.        )
  103.        )
  104.      ))
  105.   )
  106.        (command "_.erase" s "")
  107.   (setq ETIME (getvar "date"))
  108.   (prompt
  109.     (strcat
  110.       "\n程式共耗用时间: "
  111.       (rtos (* 86400.0 (- (- ETIME STIME) (fix (- ETIME STIME)))) 2 3)
  112.       "秒"
  113.     )
  114.   )
  115. )
  116. ;;;调用南方CASS命令合并
  117. (defun c:CASShb(/ s STIME)
  118.   (setq s (ssget))
  119.   (setq STIME (getvar "date"))
  120.   (command "resumegcd" s "")
  121.   (setq ETIME (getvar "date"))
  122.   (prompt
  123.     (strcat
  124.       "\n程式共耗用时间: "
  125.       (rtos (* 86400.0 (- (- ETIME STIME) (fix (- ETIME STIME)))) 2 3)
  126.       "秒"
  127.     )
  128.   )
  129. )  
  130.   
  131. ;;插入块打散后用
  132. (defun MKINSERT (PT SX SY SSZ ZJ DATA)
  133.   (entmake (list '(0 . "INSERT")
  134.                  '(100 . "AcDbBlockReference")
  135.                  (cons 2 "GC200")
  136.      (cons 8 "GCD")
  137.                  (cons 10 PT)
  138.                  (cons 41 SX)
  139.                  (cons 42 SY)
  140.      (cons 43 SSZ)
  141.      (cons 50 ZJ)
  142.                  (list -3 (list "SOUTH" (cons 1000 DATA)))
  143.             )
  144.   )
  145. )
  146. ;;;写文字岸上点打散后用
  147. (defun MKTEXTA (PT HEI ANG STR DATA / PTX TOBJ)
  148.     (setq pty (polar pt ANG 0.5))
  149.     (entmake (list '(0 . "TEXT")
  150.        (cons 7 "HZ")
  151.                    (cons 8 "GCD")      
  152.                    (cons 10 PT)
  153.                    (cons 40 HEI) ;;字高
  154.                    (cons 41 0.8)      
  155.                    (cons 50 ANG)
  156.                    (cons 1 STR)
  157.        (cons 72 0)  ;;左对齐
  158.        (cons 73 2)
  159.                    (cons 11 pty)
  160.        (list -3 (list "SOUTH" (cons 1000 DATA)))
  161.               )
  162.     )
  163. )
  164. ;;;写文字水下点左打散后用
  165. (defun MKTEXTB (PT HEI ANG STR DATA / PTz TOBJ)
  166.     (setq ptz (polar pt ANG -0.8))
  167.     (entmake (list '(0 . "TEXT")
  168.        (cons 7 "HZ")
  169.                    (cons 8 "GCD")      
  170.                    (cons 10 PT)
  171.                    (cons 40 HEI) ;;字高
  172.                    (cons 41 0.8)      
  173.                    (cons 50 ANG)
  174.                    (cons 1 STR)
  175.        (cons 11 ptz)
  176.        (cons 72 2)  ;;右对齐
  177.                    (cons 73 0)
  178.        (list -3 (list "SOUTH" (cons 1000 DATA)))
  179.               )
  180.     )
  181. )
  182. ;;;写文字水下点右打散后用
  183. (defun MKTEXTC (PT HEI ANG STR DATA / PTy TOBJ)
  184.     (setq pty (polar pt ANG 0.6))
  185.     (entmake (list '(0 . "TEXT")
  186.        (cons 7 "HZ")
  187.                    (cons 8 "GCD")      
  188.                    (cons 10 PTy)
  189.                    (cons 40 HEI) ;;字高
  190.                    (cons 41 0.8)      
  191.                    (cons 50 ANG)
  192.                    (cons 1 STR)
  193.        (cons 11 pty)
  194.        (cons 72 0)  ;;左对齐
  195.        (cons 73 0)
  196.        (list -3 (list "SOUTH" (cons 1000 DATA)))
  197.               )
  198.     )
  199. )
  200. ;;;插入块(岸上点)
  201. (defun MINSERTA (inspt scale height / pt)
  202.   (setq pt (polar inspt 0 (* 1.2 scale)))
  203.   (entmake (list
  204.              '(0 . "INSERT")
  205.              '(100 . "AcDbEntity")
  206.              '(100 . "AcDbBlockReference")
  207.              '(66 . 1)
  208.              (cons 2 "GC200")
  209.              (cons 10 inspt)
  210.              (cons 41 scale)
  211.              (cons 42 scale)
  212.              (cons 43 scale)
  213.              '(-3 ("SOUTH" (1000 . "202101")))
  214.            )
  215.   )
  216.   ;;;插入属性
  217.     (entmake (list
  218.             '(0 . "ATTRIB")
  219.             '(100 . "AcDbEntity")
  220.             '(100 . "AcDbText")
  221.       (cons 10 pt)
  222.             (cons 40 (* 10.0 scale))
  223.             (cons 50 0)
  224.             (cons 41 0.8)
  225.             (cons 51 0)
  226.             (cons 1 height)
  227.             (cons 7 "HZ")
  228.             (cons 72 0)
  229.             (cons 11 pt)
  230.             '(100 . "AcDbAttribute")
  231.             (cons 2 "height")
  232.             (cons 70 0)
  233.             (cons 74 2)
  234.            )
  235.     )
  236.            ;;;结束标志
  237.           (entmake '((0 . "SEQEND")))
  238.            (princ)
  239.   )
  240. ;;;插入块(水下点)
  241. (defun MINSERTS (inspt scale JD integer decimal / pt ptz pty)
  242.   (setq pt (polar inspt 0 (* 1.2 scale)))
  243.   (setq ptz (polar pt jd -0.8))
  244.   (setq pty (polar pt jd 0.5))
  245.   (entmake (list
  246.              '(0 . "INSERT")
  247.              '(100 . "AcDbEntity")
  248.              '(100 . "AcDbBlockReference")
  249.              '(66 . 1)
  250.              (cons 2 "GC200")
  251.              (cons 10 inspt)
  252.              (cons 41 scale)
  253.              (cons 42 scale)
  254.              (cons 43 scale)
  255.        (cons 50 JD)
  256.              '(-3 ("SOUTH" (1000 . "186400")))
  257.            )
  258.   )
  259.   ;;;插入属性
  260.     (entmake (list
  261.             '(0 . "ATTRIB")
  262.             '(100 . "AcDbEntity")
  263.             '(100 . "AcDbText")
  264.       (cons 10 pt)
  265.             (cons 40 (* 10.0 scale))
  266.             (cons 50 JD)
  267.             (cons 41 0.8)
  268.             (cons 51 0)
  269.             (cons 1 integer)
  270.             (cons 7 "HZ")
  271.             (cons 72 2)  ;;右对齐
  272.             (cons 11 ptz)
  273.             '(100 . "AcDbAttribute")
  274.             (cons 2 "integer")
  275.             (cons 70 0)
  276.       (cons 73 2)
  277.             (cons 74 1)
  278.            )
  279.     )
  280.     (entmake (list
  281.             '(0 . "ATTRIB")
  282.             '(100 . "AcDbEntity")
  283.             '(100 . "AcDbText")
  284.       (cons 10 pt)
  285.             (cons 40 (* 10.0 scale))
  286.             (cons 50 JD)
  287.             (cons 41 0.8)
  288.             (cons 51 0)
  289.             (cons 1 decimal)
  290.             (cons 7 "HZ")
  291.             (cons 72 0) ;;左对齐
  292.             (cons 11 pty)
  293.             '(100 . "AcDbAttribute")
  294.             (cons 2 "decimal")
  295.             (cons 70 0)
  296.       (cons 73 2)
  297.             (cons 74 1)
  298.            )
  299.     )
  300.            ;;;结束标志
  301.           (entmake '((0 . "SEQEND")))
  302.            (princ)
  303.   )

本帖子中包含更多资源

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

x
发表于 2014-10-7 23:02:16 | 显示全部楼层
5楼跟1楼是一样的吗
 楼主| 发表于 2014-10-8 09:07:33 | 显示全部楼层
树櫴希德 发表于 2014-10-7 23:02
5楼跟1楼是一样的吗

略有优化,但这一小小的优化,速度就上去了,关键在于仅改动了一处,即将删除原块命令一句挪动了一个位置:
(command "_.erase" s0 "")这一句改成(command "_.erase" s "")放到最后一起删除,原来放在循环里面处理一
点删除一点,致使速度慢了好多,仅此而已。

发表于 2014-12-10 08:44:58 | 显示全部楼层
谢谢楼主,我最喜欢这样的小插件。
发表于 2014-12-20 15:51:29 | 显示全部楼层
发表于 2014-12-22 08:10:25 | 显示全部楼层
谢谢分享!辛苦了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 09:41 , Processed in 0.220362 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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