找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1126|回复: 3

[他山之石] 几个函数

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-18 20:40:34 | 显示全部楼层 |阅读模式

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

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

×
  1. (defun jk:ACX_ActDoc ()
  2.   (if
  3.     (not *jk-ActDoc)
  4.     (setq *jk-ActDoc (vla-get-activedocument (vlax-get-acad-object)))
  5.     *jk-ActDoc
  6.   )
  7. )
  8. (defun jk:ACX_GetModel ()
  9.   (if
  10.     (not *jk-Model)
  11.     (setq *jk-Model (vla-get-modelspace (jk:ACX_ActDoc)))
  12.     *jk-Model
  13.   )
  14. )
  15. (defun jk:ACX_GetActiveSpace ()
  16.   (if
  17.     (= 1 (getvar "TILEMODE"))
  18.     (jk:ACX_GetModel)
  19.     (if
  20.       (= 2 (getvar "CVPORT"))
  21.       (jk:ACX_GetModel)
  22.       (vla-item (jk:ACX_GetBlocks) "*Paper_Space")
  23.     )
  24.   )
  25. )
  26. (defun jk:ACX_GetBlocks ()
  27.   (if
  28.     (not *jk-Blocks)
  29.     (setq *jk-Blocks (vla-get-Blocks (jk:ACX_ActDoc)))
  30.     *jk-Blocks
  31.   )
  32. )
  33. (defun jk:ACX_ChangeObj (Obj Lay Col LTp LTs LTw)
  34.   (setq Obj (jk:CON_VlaObject Obj))
  35.   (if
  36.     (vlax-write-enabled-p Obj)
  37.     (progn
  38.       (if
  39.         (and Lay (= (type Lay) 'STR))
  40.         (if
  41.           (not (jk:TBL_LayIsLocked Lay))
  42.           (vla-put-layer Obj Lay)
  43.         )
  44.       )
  45.       (if
  46.         (and Col (= (type Col) 'INT))
  47.         (if
  48.           (and (>= Col 0)(<= Col 256))
  49.           (vla-put-color Obj Col)
  50.         )
  51.       )
  52.       (if
  53.         (and LTp (= (type LTp) 'STR))
  54.         (if
  55.           (jk:TBL_isLtp LTp)
  56.           (vla-put-linetype Obj LTp)
  57.         )
  58.       )
  59.       (if
  60.         (and LTs (numberp LTs))
  61.         (if
  62.           (< LTs 0.0)
  63.           (vla-put-LinetypeScale Obj LTs)
  64.         )
  65.       )
  66.       (if
  67.         (and LTw (numberp LTw))
  68.         (vla-put-lineweight Obj LTw)
  69.       )
  70.     )
  71.   )
  72. )
  73. (defun jk:ACX_MakeMline
  74.    (Space Name   plst   Width  Closed Lay
  75.     Col Ltp    Lts    Ltw    /     ary
  76.     Obj Mst    Mw
  77.    )
  78.   (setq plst (mapcar '(lambda (&) (list (car &) (cadr &) (caddr &)))
  79.        plst
  80.       )
  81. Mst  (getvar "CMLSTYLE")
  82.   )
  83.   (setvar "CMLSTYLE" Name)
  84.   (setq plst (apply 'append plst)
  85. ary  (vlax-make-safearray
  86.         vlax-vbdouble
  87.         (cons 1 (length plst))
  88.       )
  89. Obj  (vla-addmline
  90.         Space
  91.         (vlax-make-variant
  92.    (vlax-safearray-fill ary plst)
  93.         )
  94.       )
  95.   )
  96.   (jk:ACX_ChangeObj Obj Lay Col LTp LTs LTw)
  97.   (setvar "CMLSTYLE" Mst)
  98.   (if Closed
  99.     (progn
  100.       (setq Mw (entget (jk:CON_Ename Obj)))
  101.       (entmod
  102. (subst (cons 71 (+ 2 (cdr (assoc 71 Mw)))) (assoc 71 Mw) Mw)
  103.       )
  104.     )
  105.   )
  106.   (setq Mw (entget (jk:CON_Ename Obj)))
  107.   (if (numberp Width)
  108.     (entmod (subst (cons 40 Width) (assoc 40 Mw) Mw))
  109.   )
  110.   (vla-put-Coordinates Obj ary)
  111.   Obj
  112. )
  113. (defun jk:ENT_isLocked (e m)
  114.   (if
  115.     (= 4
  116.       (logand
  117.         4
  118.         (jk:DXF 70 (tblsearch "LAYER" (jk:DXF 8 (entget e))))
  119.       )
  120.     )
  121.     (progn
  122.       (if m (princ "\nObiekt na zamkni?tej warstwie. "))
  123.       T
  124.     )
  125.     nil
  126.   )
  127. )
  128. (defun jk:CON_VlaObject (In)
  129.   (cond
  130.     ((= (type In) 'VLA-OBJECT) In)
  131.     ((= (type In) 'ENAME)(vlax-ename->vla-object In))
  132.     (T Nil)
  133.   )
  134. )
  135. (defun jk:CON_Ename (In)
  136.   (cond
  137.     ((= (type In) 'VLA-OBJECT)(vlax-vla-object->ename In))
  138.     ((= (type In) 'ENAME) In)
  139.     (T Nil)
  140.   )
  141. )
  142. ;; by kojacek
  143. ;; Funkcja zwraca list? ?ańcuchów tekstowych dziel?c  argument STR na
  144. ;; pod?ańcuchy. Separatorem ?ańcucha jest znak ",". UWAGA! - argument
  145. ;; [STR] nie mo?e by? ?ańcuchem w którym wyst?puj? separatory jeden
  146. ;; za drugim.
  147. (defun jk:CON_Str->List (Str / inc tmp res)
  148.   (setq inc 0)
  149.   (while
  150.     (/= tmp "")
  151.     (setq tmp
  152.       (menucmd
  153.         (strcat "M=$(index," (itoa inc) ",\"" Str "\")")
  154.       )
  155.       inc (1+ inc)
  156.     )
  157.     (setq res (append (list tmp) res))
  158.   )
  159.   (reverse (cdr res))
  160. )
  161. ;; by kojacek
  162. ;; Zwraca liste ?ańcuchów tekstowych reprezentuj?cych aktualn?
  163. ;; dat? o formacie: MM-rzym Miesi?c DD MM YYYY DzieńTygodnia
  164. ;; Wymaga funkcji jk:CON_Str->List
  165. (defun jk:SYS_TodayList (/ Date Mont)
  166.   (setq Date
  167.     (jk:CON_Str->List
  168.       (menucmd
  169.         (strcat
  170.           "M=$(edtime,$(getvar,date),MONTH"
  171.           "\",\"MO\",\"DD\",\"YYYY\",\"DDDD)"
  172.         )
  173.       )
  174.     )
  175.   )
  176.   (setq Mont
  177.     (menucmd
  178.       (strcat "M=$(index,"
  179.               (itoa (1- (read (nth 1 Date))))
  180.               ",\"I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII\")"
  181.       )
  182.     )
  183.   )
  184.   (cons Mont Date)
  185. )
  186. ;; by kojacek
  187. ;; Awraca liste ?ańcuchów tekstowych reprezentuj?cych aktualny czas:
  188. ;; Wymaga funkcji jk:CON_Str->List
  189. ;; Zwraca list? formatu: ("HH" "MM" "SS" "MSEC")
  190. (defun jk:SYS_CurTime ()
  191.   (jk:CON_Str->List
  192.     (menucmd
  193.       "M=$(edtime,$(getvar,date),HH\",\"MM\",\"SS\",\"MSEC)"
  194.     )
  195.   )
  196. )
  197. (defun jk:CON_GetvarAsStr (Var)
  198.   (menucmd
  199.     (strcat
  200.       "M=$(getvar,\"" Var "\")"
  201.     )
  202.   )
  203. )
  204. (defun jk:DXF (Code Lst)
  205.   (cdr (assoc Code Lst))
  206. )

  207. (defun jk:DXF_MakeDxfList (CodeLst DataLst / Tmp inc)
  208.   (setq Inc -1)
  209.   (if
  210.     (/= (length CodeLst)(length DataLst))
  211.     Nil
  212.     (mapcar
  213.       '(lambda (%)
  214.          (setq inc (1+ Inc))
  215.          (if
  216.            (listp (setq Tmp (nth Inc DataLst)))
  217.            (append (list %) Tmp)
  218.            (cons % Tmp)
  219.          )
  220.        )
  221.        CodeLst
  222.     )
  223.   )
  224. )
  225. ;|
  226. Przyk?ad:
  227. (jk:DXF_MakeDxfList '(0 2 10)'("INSERT" "NAZWA" (0.0 0.0 0.0)))
  228. zwraca:
  229. ((0 . "INSERT")(2 . "NAZWA")(10 0.0 0.0 0.0))
  230. oraz:
  231. (jk:DXF_MakeDxfList '(0 2 10)'("INSERT" "NAZWA"))
  232. zwraca:
  233. nil |;
  234. (defun jk:DXF_mAssoc (key alist / x nlist)
  235.   (foreach % alist
  236.     (if (eq key (car %))
  237.       (setq nlist (cons (cdr %) nlist))
  238.     )
  239.   )
  240.   (reverse nlist)
  241. )
  242. (defun jk:CAL_Sequence (start lengt step / Tmp TmpList)
  243.   (if
  244.     (and (numberp start)(numberp lengt)(numberp step))
  245.     (progn
  246.       (setq Tmp Start)
  247.       (while
  248.         (< (length TmpList) (1- Lengt))
  249.         (setq Tmp (+ Tmp Step))
  250.         (setq TmpList (append (list Tmp) TmpList))
  251.       )
  252.       (cons Start (reverse TmpList))
  253.     )
  254.     Nil
  255.   )
  256. )
  257. (defun jk:TBL_isLay (Name)
  258.   (tblobjname "LAYER" (strcase Name))
  259. )

  260. (defun jk:TBL_isLTp (Name)
  261.   (tblobjname "LTYPE" (strcase Name))
  262. )

  263. (defun jk:TBL_LayIsLocked (Name)
  264.   (if
  265.     (jk:TBL_isLay Name)
  266.     (= 4 (logand 4 (cdr (assoc 70
  267.                           (tblsearch "LAYER" (strcase Name))
  268.       )))
  269.     )
  270.     0
  271.   )
  272. )
  273. (defun jk:SYS_UndoBegin ()
  274.   (vla-StartUndoMark (jk:ACX_ActDoc))
  275. )
  276. ;; =====================================  
  277. (defun jk:SYS_UndoEnd ()
  278.   (vla-EndUndoMark (jk:ACX_ActDoc))
  279. )
  280. ;;; by kojacek
  281. ;;;
  282. (defun jk:SYS_GetCpu ()
  283.   (apply 'strcat
  284.     (mapcar
  285.       '(lambda (%)
  286.          (if
  287.     (numberp %)
  288.     (strcat "(" (itoa %) " MHz)")
  289.     (strcat % ", ")
  290.          )
  291.        )
  292.        (mapcar
  293.         '(lambda (%)
  294.           (vl-registry-read
  295.      (strcat "HKEY_LOCAL_MACHINE\\Hardware\\"
  296.              "Description\\System\\CentralProcessor\\0"
  297.      )
  298.      %
  299.    )
  300.         )
  301.         '("Identifier" "ProcessorNameString" "~MHz")
  302.       )
  303.     )
  304.   )
  305. )
  306. ;; ------------------------------------------ by kojacek 2002 -;
  307. ;; Tworzy katalog. Zwraca T lub Nil (gdy niepowodzenie)        ;
  308. ;;                                                             ;
  309. (defun jk:SYS_MkDir (Pth / Lst)
  310.   (if
  311.     (setq Lst (cdr (jk:SYS_PathList Pth)))
  312.     (foreach % Lst
  313.       (if (not (vl-file-directory-p %))(vl-mkdir %))
  314.     )
  315.   )
  316. )
  317. ;; ------------------------------------------ by kojacek 2002 -;
  318. ;; Zwraca liste kolejnych sciezek dostepu katalogu             ;
  319. ;;                                                             ;
  320. (defun jk:SYS_PathList (Pth / tmp x Res)
  321.   (if
  322.     (setq tmp (jk:STR_parse Pth "\\"))
  323.     (while Tmp
  324.       (setq x (apply
  325.                 'strcat
  326.                 (append
  327.                   (reverse
  328.                     (mapcar
  329.                       '(lambda (%)(strcat % "\\"))
  330.                       (cdr (reverse Tmp))
  331.                     )
  332.                   )
  333.                   (list (last tmp))
  334.                 )
  335.               )
  336.             Tmp (reverse (cdr (reverse Tmp)))
  337.             Res (append (list x) Res)
  338.       )
  339.     )
  340.   )
  341.   Res
  342. )
  343. (defun jk:STR_parse (str chs / len c l s chsl cnt )
  344.   (setq chsl (jk:STR_MakeList chs))
  345.   (setq len (strlen str) s "" cnt (1+ len))
  346.   (while (> (setq cnt (1- cnt)) 0)
  347.     (setq c (substr str cnt 1))
  348.     (if (member c chsl)
  349.       (if (/= cnt len)
  350.         (setq l (cons s l) s "")
  351.       )
  352.       (setq s (strcat c s))
  353.     )
  354.   )
  355.   (cons s l)
  356. )
  357. ;;; by kojacek
  358. ;;; Zmienia warto?ci zmiennych z listy podanej jako argument [l]
  359. ;;;
  360. (defun jk:SYS_SetVars (l / e)
  361.   (if
  362.     (listp l)
  363.     (while l
  364.       (if
  365.         (setq e
  366.           (vl-catch-all-error-p
  367.             (vl-catch-all-apply
  368.               'setvar
  369.               (list (car l)(cadr l))
  370.             )
  371.           )
  372.         )
  373.         Nil
  374.         (setvar (car l)(cadr l))
  375.       )
  376.       (setq l (cddr l))
  377.     )
  378.     (setq e T)
  379.   )
  380.   e
  381. )
  382. ;;; by kojacek
  383. ;;; Funkcja zapamietuj?ca warto?ci zmiennych
  384. ;;;
  385. (defun jk:SYS_ModeS (l)
  386.   (if
  387.     (listp l)
  388.     (if
  389.       (setq l (vl-remove-if-not 'getvar l))
  390.       (if
  391.         (not *jk-Var)
  392.         (setq *jk-Var (mapcar '(lambda (%)(cons % (getvar %))) l))
  393.         (foreach % (mapcar '(lambda (%)(cons % (getvar %))) l)
  394.           (if
  395.             (not (car (assoc (car %) *jk-var)))
  396.             (setq *jk-Var (append *jk-Var (list %)))
  397.             Nil
  398.           )
  399.         )
  400.       )
  401.     )
  402.   )
  403.   *jk-Var
  404. )
  405. ;;; by kojacek
  406. ;;; Funkcja przywracaj?ca warto?ci zmiennych
  407. ;;;
  408. (defun jk:SYS_ModeR ()
  409.   (if
  410.     *jk-Var
  411.     (jk:SYS_SetVars
  412.       (apply
  413.         'append
  414.         (mapcar '(lambda (%)(list (car %)(cdr %)))
  415.                 *jk-var
  416.         )
  417.       )
  418.     )
  419.     Nil
  420.   )
  421.   (setq *jk-var nil)
  422. )
  423. ;; by kojacek
  424. ;; ---------------------------------------------------------- ;
  425. ;; zwraca liste symboli globalnych                            ;
  426. ;;                                                            ;
  427. (defun jk:SYS_GetGlobals (/ s)
  428.   (setq s
  429.      (vl-remove-if
  430.        '(lambda (%)
  431.          (/= (strcase (substr % 1 4)) "*JK-")
  432.        )
  433.        (atoms-family 1)
  434.      )
  435.   )
  436.   (if s
  437.     (mapcar
  438.       '(lambda (%)(cons % (vl-symbol-value (read %))))
  439.       (vl-sort s '<)
  440.     )
  441.     Nil
  442.   )
  443. )
  444. ;; --------------------------------------------------------- ;
  445. ;; zeruje zmienne globalne "*JK-..."                         ;
  446. ;;                                                           ;
  447. (defun jk:SYS_KillGlobals (/ s)
  448.   (if
  449.     (setq Lst (jk:SYS_GetGlobals))
  450.     (foreach % s
  451.       (cond
  452.         ( (= (type (cdr %)) 'VLA-OBJECT)
  453.           (vlax-release-object (cdr %))
  454.           (set (read (car %)) Nil)
  455.         )
  456.         (T (set (read (car %)) Nil))
  457.       )
  458.     )
  459.   )
  460. )

  461. ;;; 2002 by kojacek
  462. (vl-load-com)
  463. ;;;                                                            
  464. (defun C:REGCEN (/ Sel Data Reg Obj Obj1 Obj2 Add Pt)
  465.   (if
  466.     (setq Sel (entsel "\n Wska? region lub bry??: "))
  467.      (if
  468.        (member
  469.   (jk:DXF 0 (setq Data (entget (setq Obj (car Sel)))))
  470.   '("3DSOLID" "REGION")
  471.        )
  472. (if
  473.    (not (jk:ENT_isLocked Obj 1))
  474.     (progn
  475.       (jk:SYS_UndoBegin)
  476.       (cond
  477.         ((= (jk:DXF 0 Data) "REGION")
  478.   (setq Reg  (jk:CON_VlaObject Obj)
  479.         Obj1 (vla-Copy Reg)
  480.         Obj2 (vla-Copy Reg)
  481.   )
  482.   (vla-Boolean
  483.     (vla-AddExtrudedSolid
  484.       (jk:ACX_GetModel)
  485.       Obj1
  486.       1.0
  487.       0.0
  488.     )
  489.     acUnion
  490.     (vla-AddExtrudedSolid
  491.       (jk:ACX_GetModel)
  492.       Obj2
  493.       -1.0
  494.       0.0
  495.     )
  496.   )
  497.   (vla-Delete Obj1)
  498.   (vla-Delete Obj2)
  499.   (setq Add (jk:CON_VlaObject (entlast)))
  500.   (setq Pt (vla-get-centroid Add))
  501.   (vla-Delete Add)
  502.         )
  503.         (T
  504.   (setq Pt
  505.          (vla-get-centroid (jk:CON_VlaObject Obj))
  506.   )
  507.         )
  508.       )
  509.       (entmake
  510.         (append
  511.    (jk:DXF_MakeDxfList
  512.      '(0 100 100)
  513.      '("POINT" "AcDbEntity" "AcDbPoint")
  514.    )
  515.    (list
  516.      (cons 410 (getvar "CTAB"))
  517.      (cons
  518.        10
  519.        (vlax-safearray->list (vlax-variant-value Pt))
  520.      )
  521.    )
  522.         )
  523.       )
  524.       (jk:SYS_UndoEnd)
  525.     )
  526. )
  527. (princ "\nNale?y wskaza? region lub bry??. ")
  528.      )
  529.      (princ "\nNic nie wskazano. ")
  530.   )
  531.   (princ)
  532. )

评分

参与人数 1D豆 +5 收起 理由
wowan1314 + 5 很给力

查看全部评分

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

已领礼包: 221个

财富等级: 日进斗金

发表于 2013-7-19 06:50:19 | 显示全部楼层
程序没有注解,最起码也要说明函数的作用

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-7-19 08:48:42 | 显示全部楼层
jyzas 发表于 2013-7-19 06:50
程序没有注解,最起码也要说明函数的作用

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 14:32 , Processed in 0.282460 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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