明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: caoyin

【分享明经——发程序、拜新年专贴】

    [复制链接]
 楼主| 发表于 2008-12-13 16:52:00 | 显示全部楼层

收藏无版的程序

无版的马甲好多哦,呵呵!

 楼主| 发表于 2008-12-13 16:58:00 | 显示全部楼层

再次祝明经的新老朋友:

圣诞快乐,新年发财!牛年牛气!

发表于 2008-12-13 17:02:00 | 显示全部楼层
caoyin老大,我的程序收视率好高呀,是不是有奖呀

评分

参与人数 1明经币 +5 收起 理由
Longfin + 5 【好评】 先鼓励一下,希望多发贴、多分

查看全部评分

 楼主| 发表于 2008-12-13 19:13:00 | 显示全部楼层
本帖最后由 作者 于 2008-12-13 19:29:09 编辑

恭喜你啊,点击率高有奖啊,哈哈,你要什么奖啊,请明总给你颁发发帖量最高奖
发表于 2008-12-15 22:01:00 | 显示全部楼层
谢谢caoyin老大帮我加份啦,我的宝贝还是有点,迟点再公布一个好多人都想看的宝贝,哈哈。。。。
发表于 2008-12-17 22:44:00 | 显示全部楼层
晕了!
发表于 2008-12-18 09:43:00 | 显示全部楼层
本帖最后由 作者 于 2008-12-18 9:50:23 编辑

好久没有认认真真来看论坛的每一讨论的话题了,主要是手上的开发工作太多工作压力大。今天看了这个贴上面好多朋友发表了他们精心设计的程序代码很,我觉的我们明经上面拥有很多很多不同功能的程序源代码。对初学者或有资深经验的开发者来讲明经是一个给他们的前进加油的主站。精明一点的朋友稍稍努力地整理一下我们明经论坛上面的每一个朋友发表的程序组合起来,可以很高效、很稳健的开发出一个很棒的行业软件的。
今天,我到我开发了几年的LISP包里面抽一个简单的LISP代码发在这里,希望对初学者有一定的帮助:)

  1. ;功能: 键盘控制对象进行移动
  2. ;编程: 包达勇
  3. ;时间: 2005-07-19
  4. (DEFUN C:MMad (/ BASEPOINT0 BASEPOINT1 BASEPOINT2 CENTPOINT D KEYLIST LOOP N OS SSET STEP)
  5.   (SETVAR "CMDECHO" 0)
  6.   (setq os (getvar "osmode"))
  7.   (setvar "osmode" 0)
  8.   (SETQ loop 1)
  9.   (WHILE loop
  10.     (PROMPT "\nSelect object of auto move : ")
  11.     (SETQ SSet (SSGET))
  12.     (COND
  13.       ((NULL SSet)(ALERT "还没有选择对象,重新选择!"))
  14.       (T (SETQ loop nil))
  15.     )
  16.   )
  17.   (setq step nil)
  18.   (SETQ step (getreal "\n输入移动的步长<1>:"))
  19.   (if (= step nil) (SETQ step 1.0))
  20. ;;;  (PRINC "\n Press key:")
  21. ;;;  (PRINC "\n\t E --- UP")
  22. ;;;  (PRINC "\n\t D --- DOWN")
  23. ;;;  (PRINC "\n\t S --- LEFT")
  24. ;;;  (PRINC "\n\t F --- RIGHT")
  25.   (PRINC "\n请按方向键:[E向上移/D向下移/S向左移/F向右移]")
  26.   (TERPRI)
  27.   ;;;(ascii "e")=101
  28.   ;;;(ascii "d")=100
  29.   ;;;(ascii "s")=115
  30.   ;;;(ascii "f")=102
  31.   ;;;(ascii "q")=113
  32.   ;;;(ascii "+")=43
  33.   ;;;(ascii "-")=45
  34.   ;;;(ascii "E")=69
  35.   ;;;(ascii "D")=68
  36.   ;;;(ascii "S")=83
  37.   ;;;(ascii "F")=70
  38.   (SETQ KeyList '(101 100 115 102 32 43 45 69 68 83 70 50 52 54 56 3))
  39.   (SETQ n (CADR (GRREAD D)))
  40.   (WHILE (/= n 32);;; 32代表空格键完成退出这个程序
  41.     (WHILE (NOT (MEMBER n KeyList))
  42.       (SETQ n (CADR (GRREAD)))
  43.     )
  44.     (SETQ BasePoint0  '(0 0 0));(LIST 0 0)
  45.     (SETQ BasePoint1 (LIST (CAR BasePoint0) (+(CADR BasePoint0)step)));(LIST 0 step)
  46.     (SETQ BasePoint2 (LIST (+(CAR BasePoint0) step) (CADR BasePoint0)));(LIST step 0)
  47.     (COND
  48.       ((EQUAL n 101)(COMMAND "MOVE" SSet "" BasePoint0 BasePoint1)(PRINC "\r向上移动")(princ step)(princ "mm:"));键盘T
  49.       ((EQUAL n 69)(COMMAND "MOVE" SSet "" BasePoint0 BasePoint1)(PRINC "\r向上移动")(princ step) (princ "mm:"));键盘T
  50.       ((EQUAL n 56)(COMMAND "MOVE" SSet "" BasePoint0 BasePoint1)(PRINC "\r向上移动")(princ step) (princ "mm:"));键盘T
  51.       ((EQUAL n 100)(COMMAND "MOVE" SSet "" BasePoint1 BasePoint0)(PRINC "\r向下移动")(princ step) (princ "mm:"));键盘D
  52.       ((EQUAL n 50)(COMMAND "MOVE" SSet "" BasePoint1 BasePoint0)(PRINC "\r向下移动")(princ step) (princ "mm:"));键盘D
  53.       ((EQUAL n 68)(COMMAND "MOVE" SSet "" BasePoint1 BasePoint0)(PRINC "\r向下移动")(princ step)(princ "mm:"));键盘D
  54.       ((EQUAL n 115) (COMMAND "MOVE" SSet "" BasePoint2 BasePoint0)(PRINC "\r向左移动")(princ step)(princ "mm:"));键盘S
  55.       ((EQUAL n 52) (COMMAND "MOVE" SSet "" BasePoint2 BasePoint0)(PRINC "\r向左移动")(princ step)(princ "mm:"));键盘S
  56.       ((EQUAL n 83) (COMMAND "MOVE" SSet "" BasePoint2 BasePoint0)(PRINC "\r向左移动")(princ step )(princ "mm:"));键盘S
  57.       ((EQUAL n 102)(COMMAND "MOVE" SSet "" BasePoint0 BasePoint2)(PRINC "\r向右移动")(princ step)(princ "mm:"));键盘F
  58.       ((EQUAL n 70)(COMMAND "MOVE" SSet "" BasePoint0 BasePoint2)(PRINC "\r向右移动")(princ step)(princ "mm:"));键盘F
  59.       ((EQUAL n 54)(COMMAND "MOVE" SSet "" BasePoint0 BasePoint2)(PRINC "\r向右移动")(princ step)(princ "mm:"));键盘F
  60.       ((EQUAL n 3)(COMMAND "MOVE" SSet "" BasePoint0 BasePoint2)(PRINC "\r向右移动")(princ step)(princ "mm:"));鼠标键
  61. ;;;      ((EQUAL n 43)(setq step (1+ step)));;;移动加速
  62. ;;;      ((EQUAL n 45)(setq step (- step 1.0)));;;移动减速
  63.       ((= n 43)(setq step (1+ step)) (princ "\r移动步长=")(princ step))
  64.       ((= n 45)(setq step (- step 1)) (princ "\r移动步长=")(princ step))
  65.     )
  66.     (SETQ n (CADR (GRREAD)))
  67.   );WHILE
  68.   (setvar "osmoDe" os )
  69.   (SETVAR "CMDECHO" 1)
  70.   (PRINC)
  71. )

本帖子中包含更多资源

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

x

点评

赞一个  发表于 2022-12-9 23:53

评分

参与人数 1明经币 +2 收起 理由
mccad + 2 【好评】 【分享明经——发程序、拜新年

查看全部评分

 楼主| 发表于 2008-12-18 14:04:00 | 显示全部楼层
本帖最后由 作者 于 2009-2-8 10:00:30 编辑

如果有问题,56楼有一个临时修正版
  1. ;;;   NCOPY.lsp
  2. ;;;   By MJTD.com @ Caoyin 2007-6-20
  3. ;;;   仿照 ET 的 NCOPY,并扩展增强其功能
  4. ;;;   从块(或属性)、多段线、多线或标注中复制套嵌对象(子图元)
  5. ;;;   替代 ExpressTools 的 NCOPY 命令,ExpressTools 仅支持块对象
  6. ;;;   支持 NUS 块
  7. ;;;   暂不支持填充图案
  8. (defun C:NCOPY (/ OS SS NEN $LT-ENTSEL$ EN ES EP P1 ELST TYP EN1 PP P2 SC DOC BLKS BLK)
  9.   (setq OS (getvar "osmode"))
  10.   (sssetfirst nil nil)
  11.   (lt:error-init '(("cmdecho" 0 "osmode" 0 "qaflags" 1 "explmode" 1) 1 nil))
  12.   (setq SS (ssadd))
  13.   (princ "\n复制块、多段线、多线或标注中的套嵌对象...")
  14.   (setq $LT-ENTSEL$ T)
  15.   (while (setq NEN (lt:entsel nil nil nil))
  16.     (if (= (length NEN) 2)
  17.       (setq EN (car NEN))
  18.       (setq EN (car (last NEN)))
  19.     )
  20.     (cond ((if (ssmemb EN SS)
  21.              (princ "重复选择,忽略。")
  22.              (progn
  23.                (setq ELST (entget EN)
  24.                      TYP  (cdr (assoc 0 ELST))
  25.                )
  26.                nil
  27.              )
  28.            )
  29.           )
  30.           ((= TYP "MLINE")
  31.            (entmake ELST)
  32.            (setq EN1 (entlast))
  33.            (command "_.explode" EN1 "")
  34.            (setq ES  (lt:ss->list (ssget "_P"))
  35.                  P1  (cadr NEN)
  36.                  EN1 (nth (car (vl-sort-i
  37.                                  (mapcar '(lambda (X)
  38.                                             (distance (vlax-curve-getClosestPointTo X P1) P1)
  39.                                           )
  40.                                          ES
  41.                                  )
  42.                                  '<
  43.                                )
  44.                           )
  45.                           ES
  46.                      )
  47.            )
  48.            (foreach X ES
  49.              (if (not (eq X EN1)) (entdel X))
  50.            )
  51.           )
  52.           ((= TYP "LWPOLYLINE")
  53.            (setq PP    (fix (vlax-curve-getParamAtPoint
  54.                               EN
  55.                               (apply 'vlax-curve-getClosestPointTo NEN)
  56.                             )
  57.                        )
  58.                  ELST1 (lt:list-sub ELST 0 (vl-position (assoc 10 ELST) ELST))
  59.                  ELST1 (subst '(70 . 0) (assoc 70 ELST1) ELST1)
  60.                  ELST2 (member (assoc 10 ELST) ELST)
  61.                  ELST3 (member (assoc 210 ELST2) ELST2)
  62.            )
  63.            (if (and (vlax-curve-isClosed EN)
  64.                     (/= (setq EP (vlax-curve-getEndParam EN)) 1)
  65.                     (= EP (1+ PP))
  66.                )
  67.              (setq ELST2 (append (lt:list-sub ELST2 (* PP 4) 4)
  68.                                  (lt:list-sub ELST2 0 4)
  69.                          )
  70.              )
  71.              (setq ELST2 (lt:list-sub ELST2 (* PP 4) 8))
  72.            )
  73.            (entmake (append ELST1 ELST2 ELST3))
  74.            (setq EN1 (entlast))
  75.           )
  76.           ((= TYP "INSERT")
  77.            (setq SC (mapcar '(lambda (X) (assoc X ELST)) '(10 41 42 43 50))
  78.                  P1 (cdar SC)
  79.                  SC (cdr SC)
  80.            )
  81.            (entmake (entget (car NEN)))
  82.            (setq EN1 (entlast)
  83.                  DOC (vla-get-activedocument (vlax-get-acad-object))
  84.                  BLKS (vla-get-Blocks DOC)
  85.            )
  86.            (vlax-invoke DOC
  87.                         'CopyObjects
  88.                         (list (en2obj EN1))
  89.                         (setq BLK (vla-add BLKS (vlax-3d-point '(0 0 0)) "*U"))
  90.            )
  91.            (setq BLK (vla-get-name BLK))
  92.            (entdel EN1)
  93.            (entmake (vl-list* '(0 . "INSERT") (cons 2 BLK) (cons 10 P1) SC))
  94.            (setq EN1 (entlast))
  95.            (vl-catch-all-apply 'vla-delete (list (vla-item BLKS BLK)))
  96.           )
  97.           ((= TYP "ATTRIB")
  98.            (princ "\n所选对象为属性,自动转换为单行文字...")
  99.            (setq ELST (vl-remove-if '(lambda (X)
  100.                                        (member (car X) '(-1 0 330 5 100 2 70 71 72 74))
  101.                                      )
  102.                                     ELST
  103.                       )
  104.            )
  105.            (entmake (cons '(0 . "TEXT") ELST))
  106.            (setq EN1 (entlast))
  107.           )
  108.           ((= TYP "DIMENSION")
  109.            (entmake (entget (car NEN)))
  110.            (setq EN1 (entlast))
  111.           )
  112.           (T (command "_.copy" EN "" "0,0" "@")
  113.              (setq EN1 (entlast))
  114.           )
  115.     )
  116.     (if EN1 (progn (ssadd EN1 SS) (redraw EN1 3)))
  117.   )
  118.   (if (and SS (/= (sslength SS) 0))
  119.     (progn
  120.       (setvar "osmode" OS)
  121.       (if (setq P1 (getpoint "\n指定基点 <原位置>: "))
  122.         (progn
  123.           (command "_.move" SS "" "_non" P1)
  124.           (princ "指定第二点: ")
  125.           (command "\")
  126.         )
  127.       )
  128.       (if (equal (getvar "lastpoint") P1 1e-7)
  129.         (command "_.erase" SS "")
  130.       )
  131.       (command "_.select" SS "")
  132.       (if (setq SS1 (ssget "_P" '((0 . "INSERT"))))
  133.         (command "_.explode" SS1 "");;;
  134.       )
  135.       (command "_.select" SS "")
  136.     )
  137.   )
  138.   (lt:error-restore)
  139. )
  140. ;;-----------------------------------------------------
  141. ;;本程序支持函数
  142. (defun lt:list-sub (lst sta len / item n)
  143.   (setq item (nth sta lst) n (- (length lst) sta))
  144.   (while (/= (length (setq lst (member item lst))) n) (setq lst (cdr lst)))
  145.   (setq item (nth (1- len) lst) lst (reverse lst))
  146.   (while (/= (length (setq lst (member item lst))) len) (setq lst (cdr lst)))
  147.   (reverse lst)
  148. )
  149. (defun lt:ss->list (ss / lst)
  150.   (foreach x (ssnamex ss)
  151.     (if (= (car x) 3) (setq lst (append lst (list (cadr x)))))
  152.   )
  153.   lst
  154. )
  155. ;; lt:entsel --> 见本帖3楼
  156. ;; lt:error-init lt:error-restore
  157. ;;       --> http://bbs.mjtd.com/forum.php?mod=viewthread&tid=59013&replyID=&skin=1


[url=http://bbs.mjtd.com/forum.php?mod=viewthread&tid=59013&replyID=&skin=1][/url]

评分

参与人数 1明经币 +1 收起 理由
mccad + 1 【好评】 【分享明经——发程序、拜新年

查看全部评分

 楼主| 发表于 2008-12-18 14:14:00 | 显示全部楼层
本帖最后由 作者 于 2008-12-18 14:19:59 编辑

  1. ;;;修改任意对象的颜色(MLINE除外)---caoyin
  2. ;;;龙龙仔版主有这样一个程序,我学着写了一个
  3. ;;;--------------------------------------------------------------
  4. (defun c:ChColor (/ SS BLKS I BNLst)
  5.   (if (and (setq SS (lt:ssget '("\n选择要修改颜色的对象: ")))
  6.            (or $ChColor$ (setq $ChColor$ 7))
  7.            (setq $ChColor$ (acad_colordlg $ChColor$))
  8.       )
  9.     (progn
  10.       (setq BLKS  (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
  11.       (defun ChColor (OBJ / oName BlkName)
  12.         (setq oName (vla-get-ObjectName OBJ))
  13.         (cond
  14.           ((wcmatch oName "*Dimension,AcDbLeader,AcDbFcf")
  15.            (vla-put-DimensionLineColor OBJ $ChColor$)
  16.            (if (wcmatch oName "*Dimension")
  17.              (progn
  18.                (vla-put-ExtensionLineColor OBJ $ChColor$)
  19.                (if (setq BlkName (assoc 2 (entget (vlax-vla-object->ename OBJ))))
  20.                  (vlax-for OBJ (vla-item Blks (cdr BlkName))
  21.                    (vla-put-color OBJ $ChColor$)
  22.                  )
  23.                )
  24.              )
  25.            )
  26.            (if (wcmatch oName "*Dimension,AcDbFcf")
  27.              (vla-put-TextColor OBJ $ChColor$)
  28.            )
  29.           )
  30.           ((= oName "AcDbBlockReference")
  31.            (setq BlkName (vla-get-name OBJ))
  32.            (if (not (member BlkName BNLst))
  33.              (progn
  34.                (setq BNLst (cons BlkName BNLst))
  35.                (vlax-for X (vla-item Blks BlkName)
  36.                  (ChColor X)
  37.                )
  38.              )
  39.            )
  40.            (if (= (vla-get-HasAttributes OBJ) :vlax-true)
  41.              (foreach X (vlax-invoke OBJ 'getattributes)
  42.                (vla-put-color X $ChColor$)
  43.              )
  44.            )
  45.           )
  46.         )
  47.         (vla-put-color obj $ChColor$)
  48.       )
  49.       (repeat (setq I (sslength SS))
  50.         (setq OBJ (vlax-ename->vla-object (ssname SS (setq I (1- I)))))
  51.         (ChColor OBJ)
  52.       )
  53.     )
  54.   )
  55.   (princ)
  56. )
  57. ;;;-----------------支持函数
  58. ;; lt:ssget --> 见本帖3楼

点评

是该好好研究曹版的好程序的时候了  发表于 2012-7-1 00:47

评分

参与人数 2明经币 +2 收起 理由
yjr111 + 1
mccad + 1 【好评】 【分享明经——发程序、拜新年

查看全部评分

 楼主| 发表于 2008-12-18 14:18:00 | 显示全部楼层
本帖最后由 作者 于 2008-12-18 14:19:01 编辑

  1. ;; 删除块中属性--- by caoyin
  2. (defun C:BLKRMATT (/ DELATT SS I EN EL LST)
  3.   (LT:ERROR-INIT '(nil 1 nil "删除块中属性: BLKRMATT "))
  4.   (defun DELATT (ENAME / OBJ BN BNLST)
  5.     (setq OBJ (vlax-ename->vla-object ENAME)
  6.           BN  (vla-get-Name OBJ)
  7.     )
  8.     (if (= (vla-get-HasAttributes OBj) :vlax-true)
  9.       (progn
  10.         (foreach x (vlax-invoke OBJ 'getattributes)
  11.           (vla-delete X)
  12.         )
  13.         (if (not (member BN BNLST))
  14.           (progn
  15.             (setq BNLST (cons BN BNLST))
  16.             (vlax-for X
  17.               (vla-item (vla-get-blocks
  18.                           (vla-get-activedocument (vlax-get-acad-object))
  19.                         )
  20.                         BN
  21.               )
  22.               (if (= (vla-get-ObjectName X) "AcDbAttributeDefinition")
  23.                 (vla-delete X)
  24.               )
  25.             )
  26.           )
  27.         )
  28.       )
  29.     )
  30.   )
  31.   (if (setq SS (LT:SSGET '("\n选择要删除属性的块: " ((0 . "INSERT") (66 . 1)))))
  32.     (progn
  33.       (princ "已更新 ")
  34.       (repeat (princ (setq I (sslength SS)))
  35.         (setq EN (ssname SS (setq I (1- I)))
  36.               EL (entget EN)
  37.         )
  38.         (DELATT EN)
  39.         (entmake (vl-remove (assoc 66 EL) EL))
  40.         (setq LST (cons (entlast) LST))
  41.         (entdel EN)
  42.       )
  43.       (foreach X LST (ssadd X SS)) ;;确保程序执行完毕可执行 (ssget "_P")
  44.       (LT:SS-ACTIVE SS)
  45.       (princ " 个对象。")
  46.     )
  47.   )
  48.   (LT:ERROR-RESTORE)
  49. )
  50. ;;;-----------------支持函数
  51. (defun lt:ss-active (ss)
  52.   (sssetfirst nil ss)
  53.   (ssget "_I")
  54.   (sssetfirst)
  55. )
  56. ;; lt:ssget --> 见本帖3楼
  57. ;; lt:error-init lt:error-restore
  58. ;;       --> http://bbs.mjtd.com/forum.php?mod=viewthread&tid=59013&replyID=&skin=1
  59. ;;


评分

参与人数 1明经币 +2 收起 理由
mccad + 2 【好评】 【分享明经——发程序、拜新年

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-27 14:54 , Processed in 0.181641 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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