找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 640|回复: 1

[转贴]:一些函数

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-11-28 13:18:36 | 显示全部楼层 |阅读模式

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

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

×

  1. ;;; Michels Visual LISP Functions
  2. ;;; These functions all work correctly, but containg only minimal error checking
  3. ;;;
  4. ;;; There are five Trigonometric functions
  5. ;;;
  6. ;;; (deg->rad angle): input angle in degrees as a real or int, returns angle in radians as real
  7. ;;; (rad->deg angle): input angle in radians as a real or int, returns angle in degrees as real
  8. ;;; (tan angle): input angle in radians, retuns tangent of angle as real
  9. ;;; (asin real): input real, returns arcsine of number in radians
  10. ;;; (acos real): input real, returns arcosine of number in radians
  11. ;;;
  12. ;;; Four general information functions
  13. ;;;
  14. ;;; (3d->2d 3d point) returns a 2d point
  15. ;;; (2d->3d 2d point level) returns a 3d point with z value equal to level or 0.0 if nil
  16. ;;; info: select object, retuns a dialog listing entity type and layer, also if in a block and/or XREF
  17. ;;;          displays names and layers of blocks/XREF's
  18. ;;; (stringp atom): returns T if atom is a string
  19. ;;; (intp atom): returns T if atom is an integer
  20. ;;; (realp atom): returns T if atom is a real number
  21. ;;;
  22. ;;; Ten list manipulation tools
  23. ;;;
  24. ;;; (vl-remove-last list): input list, removes last element from list
  25. ;;; (strl_sort list): input list of strings, similar to (acad_strlsort) but sorts numbers numerically
  26. ;;; (remove atom list): similar to (vl-remove) but only removes first occurance of atom in list
  27. ;;; (nth-remove nth list): removes nth element from list
  28. ;;; (vl-add atom nth list): adds atom as nth element of list
  29. ;;; (sublist start length list): returns a number of elements after start position from a list
  30. ;;; (remlist start length list): removes a number of elements after start position from a list
  31. ;;; (list->string delim list): input deliminator as string, list, converts elements of list to a deliminated string
  32. ;;; (sslist pickset): input selectionsel, returns list of selected entities
  33. ;;; (strconv list): converts elements of list into strings
  34. ;;;
  35. ;;; Ten String functions
  36. ;;;
  37. ;;; (ltrim string): input string, removes any spaces from the beginning of the string
  38. ;;; (rtrim string): input string, removes any spaces from the end of the string
  39. ;;; (trim string): input string, removes speces from beginning and end of string
  40. ;;; (string->list string): input string, returns the string a list using spaces a delimineater
  41. ;;; (mid string string): input two strings, returns first string if it is found within second string else nil
  42. ;;; (stringp val): input a value, returns true if value is a string else nil
  43. ;;; (strrev string): reverses string
  44. ;;; (replace oldstring newstring string): replaces occurances of oldstring in string with newstring
  45. ;;; (stringtype string): returns data type of contents of the string
  46. ;;; (list->string delim list): converts list into delimted string
  47. ;;; (right string int): returns number of charachters from right of string
  48. ;;; (left string int): returns number of charachters from left of string
  49. ;;; (multiline string int): returns string as a list of strings, each element being no longer than int
  50. ;;; but finishing with a full word if possible
  51. ;;;

  52. ;;;(if (null c:fun)        checks if lisp routine is loaded
  53. ;;;        (load fun.lsp) load function
  54. ;;;        )


  55. (defun c:functions ()                        ;provide to check if routine is loaded
  56.   (alert "Functions Routine Loaded")
  57. )

  58. (defun 3d->2d (f_3d)                        ;converts 3d co-ordinate to 2d
  59.   (list (car f_3d) (cadr f_3d))
  60. )
  61.                                         ;eg (setq a (3d->2d '(0 0 0))) = (0 0)

  62. (defun 2d->3d (f_d f_3d)                ;converts 2d co-ordinate to 3d with given level
  63.   (if (not (numberp f_3d))
  64.     (setq f_3d 0)
  65.   )
  66.   (if f_3d
  67.     (append f_2d (list f_3d))
  68.     (append f_2d '(0.0))
  69.   )
  70. )
  71.                                         ;eg (setq a (2d->3d '(0 0) 0)) = (0 0 0)

  72. (defun vl-remove-last (f_l)                ;removes last element from a list
  73.   (setq f_l (reverse (cdr (reverse f_l))))
  74. )
  75.                                         ;eg (setq a (vl-remove-last '(1 2 3))) = (1 2)

  76. (defun deg->rad        (f_ang)                        ;converts angles from degrees to radians
  77.   (setq f_ang (* pi (/ f_ang 180.0)))
  78. )
  79.                                         ;eg (setq a (deg->rad 180)) = 3.14

  80. (defun rad->deg        (f_ang)                        ;converts angles from radians to degrees
  81.   (setq f_ang (* 180.0 (/ f_ang pi)))
  82. )
  83.                                         ;eg (setq a (rad->deg (/ pi 2.0))) = 90

  84. (defun tan (f_ang / f_tangent)                ;tangent funtion usesangles in radians
  85.   (setq f_tangent (/ (sin f_ang) (cos f_ang)))
  86. )
  87.                                         ;eg (setq a (tan (/ pi 4))) = 1.0

  88. (defun asin (f_ang)                        ;arcsin function uses angles in radians
  89.   (if (= (atof (rtos (abs f_ang))) 1)
  90.     0
  91.     (atan (/ f_ang (sqrt (+ (* (- f_ang) f_ang) 1))))
  92.   )
  93. )
  94.                                         ;eg (setq a (asin 0.5)) = 0.523

  95. (defun acos (f_ang)                        ;arcosine function uses angles in radians
  96.   (if (= (atof (rtos (abs f_ang))) 1)
  97.     0
  98.     (+ (atan (/ (- f_ang) (sqrt (+ (* (- f_ang) f_ang) 1))))
  99.        (* 2 (atan 1))
  100.     )
  101.   )
  102. )
  103.                                         ;eg (setq a (acos 0.5)) = 10.0472

  104. (defun strl_sort (f_stringlist / f_numl f_strl f_n f_cur)
  105.                                         ; similar to acad_strlsort, but sorts string representing numbers numberically
  106.   (setq        f_numl nil
  107.         f_strl nil
  108.   )
  109.   (foreach f_n f_stringlist                ;loop through each element in list
  110.     (progn
  111.       (if (numberp (read f_n))                ;test if number
  112.         (setq f_numl (append f_numl (list f_n)))
  113.                                         ;create list of numbers
  114.         (setq f_strl (append f_strl (list f_n)))
  115.                                         ;create list of strings
  116.       )
  117.     )
  118.   )
  119.   (setq f_stringlist nil)
  120.   (repeat (length f_numl)                ;loop through list of numbers
  121.     (progn
  122.       (setq f_cur (car f_numl))
  123.       (foreach f_n (cdr f_numl)                ;loop through remainder of number list
  124.         (if (> (read f_cur) (read f_n))        ;test if current value smaller than elements in list
  125.           (setq f_cur f_n)                ;if so replace current value with smaller value
  126.         )
  127.       )
  128.       (setq f_numl (remove f_cur f_numl))
  129.                                         ;remove current (smallest) value from number list
  130.       (setq f_stringlist (append f_stringlist (list f_cur)))
  131.                                         ;add current (smallest) value to end of final list
  132.     )
  133.   )
  134.   (repeat (length f_strl)                ;loop through list of strings
  135.     (progn
  136.       (setq f_cur (car f_strl))
  137.       (foreach f_n (cdr f_strl)                ;loop though remainder of string list
  138.         (if (> f_cur f_n)                ;test for alphabetical order
  139.           (setq f_cur f_n)                ;replace current value for precending value
  140.         )
  141.       )
  142.       (setq f_strl (remove f_cur f_strl))
  143.                                         ;remove current value from string list
  144.       (setq f_stringlist (append f_stringlist (list f_cur)))
  145.                                         ;add current value to end of final list
  146.     )
  147.   )
  148. )
  149.                                         ;eg (strl_sort '("b" "a" "10" "1")) = ("1" "10" "a" "b")

  150. (defun remove (f_new f_newlist / f_test);removes first occurance of an element from a list
  151.   (if (member f_new f_newlist)                ;is value present in list
  152.     (progn
  153.       (setq f_test nil)                        ;test to see if element removed
  154.       (repeat (length f_newlist)        ;loop through list
  155.         (progn
  156.           (if (not (and (= f_test nil) (= (car f_newlist) f_new)))
  157.                                         ;test if element removed or element is to be removed
  158.             (setq f_newlist
  159.                    (cdr (append f_newlist (list (car f_newlist))))
  160.             )                                ;swaps moves first element to end of list
  161.             (progn
  162.               (setq f_test t)                ;element has been removed
  163.               (setq f_newlist (cdr f_newlist))
  164.                                         ;remove first element from list
  165.             )
  166.           )
  167.         )
  168.       )
  169.     )
  170.   )
  171. )
  172.                                         ;eg (remove 1 '(1 1 2 1)) = (1 2 1)

  173. (defun nth-remove (f_n f_list /)        ;removes nth element from a list
  174.   (if (and (numberp f_n) (listp f_list))
  175.     (if        (and (>= f_n 0) (< f_n (length f_list)))
  176.       (progn
  177.         (repeat        f_n
  178.           (setq f_list (append (cdr f_list) (list (car f_list))))
  179.         )
  180.         (setq f_list (cdr f_list))
  181.         (repeat        (- (length f_list) f_n)
  182.           (setq f_list (append (cdr f_list) (list (car f_list))))
  183.         )
  184.       )
  185.     )
  186.   )
  187.   f_list
  188. )
  189.                                         ;eg (nth-remove (0 '(1 2 3))) = (2 3)

  190. (defun vl-add (f_new f_n f_newlist)        ;add element to nth position in a list
  191.   (if (not (listp f_newlist))                ;test if a list
  192.     (setq f_newlist (list f_newlist))        ;creates list
  193.   )
  194.   (cond
  195.     ((= f_n 0) (setq f_newlist (append (list f_new) f_newlist)))
  196.                                         ;if target first element, make into list and add list
  197.     ((>= f_n (length f_newlist))        ;is target end of list
  198.      (setq f_newlist (append f_newlist (list f_new)))
  199.                                         ;add element to end of list
  200.     )
  201.     (t
  202.      (progn
  203.        (setq f_loop -1)                        ;initialize counter
  204.        (foreach        f_x f_newlist                ;loop through list
  205.          (progn
  206.            (setq f_loop (1+ f_loop))        ;increment counter
  207.            (if (= f_n f_loop)                ;if target element
  208.              (setq f_newlist (cdr (append f_newlist (list f_new f_x))))
  209.                                         ;add element to end of list, move first element to end of list
  210.              (setq f_newlist (cdr (append f_newlist (list f_x))))
  211.                                         ;move first element to end of list
  212.            )
  213.          )
  214.        )
  215.      )
  216.     )
  217.   )
  218. )
  219.                                         ;eg (vl-add 2 1 '(3 3)) = (3 2 3)

  220. (defun sublist (f_n f_m f_newlist / f_loop f_x)
  221.                                         ;returns sublist of a list, similar to substr function
  222.   (if (>= (length f_newlist) f_n)        ;test range
  223.     (progn
  224.       (setq f_loop -1)                        ;initialize counter
  225.       (setq f_m (+ f_n (- f_m 1)))        ;setq end element
  226.       (foreach f_x f_newlist                ;loop through list
  227.         (progn
  228.           (setq f_loop (1+ f_loop))        ;increment counter
  229.           (if (and (<= f_n f_loop) (>= f_m f_loop)) ;check within range
  230.             (setq f_newlist (cdr (append f_newlist (list f_x))))
  231.                                         ;move first element to end of list
  232.             (setq f_newlist (cdr f_newlist)) ;remove first element
  233.           )
  234.         )
  235.       )
  236.     )
  237.   )
  238. )
  239.                                         ;eg (sublist 1 2 '(1 2 3 4 5)) = (2 3)

  240. (defun remlist (f_n f_m f_newlist / f_loop f_x)
  241.                                         ;removes number of elemts from list
  242.   (if (>= (length f_newlist) f_n)        ;test range
  243.     (progn
  244.       (setq f_loop -1)                        ;initialize counter
  245.       (setq f_m (+ f_n (- f_m 1)))        ;set end element
  246.       (foreach f_x f_newlist                ;loop through list
  247.         (progn
  248.           (setq f_loop (1+ f_loop))        ;increment counter
  249.           (if (and (<= f_n f_loop) (>= f_m f_loop)) ;check within range
  250.             (setq f_newlist (cdr f_newlist))
  251.                                         ;remove first element from list
  252.             (setq f_newlist (cdr (append f_newlist (list f_x))))
  253.                                         ;move first element to end of list
  254.           )
  255.         )
  256.       )
  257.     )
  258.   )
  259. )
  260.                                         ;eg (remlist 1 2 '(1 2 3 4 5)) = (1 4 5)


  261. (defun string->list (f_string / f_ls f_str f_len f_loop f_cur)
  262.                                         ;converts string to a list using spaces as deliminators
  263.   (setq        f_ls nil
  264.         f_str ""
  265.   )
  266.   (setq f_loop 0)
  267.   (repeat (strlen f_string)
  268.     (progn
  269.       (setq f_loop (1+ f_loop))
  270.       (setq f_cur (substr f_string f_loop 1))
  271.       (if (= (ascii f_cur) 32)
  272.         (if (/= f_str "")
  273.           (progn (setq f_ls (append f_ls (list f_str)))
  274.                  (setq f_str "")
  275.           )
  276.         )
  277.         (setq f_str (strcat f_str f_cur))
  278.       )
  279.     )
  280.   )
  281.   (if (/= f_str "")
  282.     (setq f_ls (append f_ls (list f_str)))
  283.   )
  284.   f_ls
  285. )
  286.                                         ;eg (string->list "Hello World") = ("Hello" "World")

  287. (defun ltrim (f_string / f_loop)        ;removes spaces from left of string
  288.   (setq f_loop 1)
  289.   (while (= (ascii (substr f_string f_loop 1)) 32)
  290.     (setq f_loop (1+ f_loop))
  291.   )
  292.   (setq f_string (substr f_string f_loop (strlen f_string)))
  293. )
  294.                                         ;eg (ltrim "  trim  ") = "trim  "

  295. (defun rtrim (f_string)                        ;removes spaces from right of string
  296.   (setq f_loop 0)
  297.   (setq f_len (strlen f_string))
  298.   (while (= (ascii (substr f_string (- f_len f_loop) 1)) 32)
  299.     (setq f_loop (1+ f_loop))
  300.   )
  301.   (setq f_string (substr f_string 1 (- f_len f_loop)))
  302. )
  303.                                         ;eg (rtrim "  trim  ") = "  trim"

  304. (defun trim (f_string)                        ;removes spaces from outside of string
  305.   (setq f_string (ltrim f_string))
  306.   (setq f_string (rtrim f_string))
  307. )
  308.                                         ;eg (trim "  trim  ") = "trim"

  309. (defun mid (f_string1 f_string2 / f_test f_loop)
  310.                                         ;tests if string1 is contained in string2
  311.   (setq f_test nil)
  312.   (cond
  313.     ((or (= (strlen f_string1) 0) (= (strlen f_string2) 0))
  314.      (setq f_test nil)
  315.     )
  316.     ((> (strlen f_string1) (strlen f_string2))
  317.      (setq f_test nil)
  318.     )
  319.     (t
  320.      (progn
  321.        (setq f_loop 1)
  322.        (repeat (- (strlen f_string2) (- (strlen f_string1) 1))
  323.          (progn
  324.            (if
  325.              (=        (strcase f_string1)
  326.                 (strcase (substr f_string2 f_loop (strlen f_string1)))
  327.              )
  328.               (setq f_test f_string1)
  329.            )
  330.            (setq f_loop (1+ f_loop))
  331.          )
  332.        )
  333.      )
  334.     )
  335.   )
  336.   f_test
  337. )
  338.                                         ;eg (mid "to" "AutoCAD") = "to"

  339. (defun sslist (f_sel)                        ;converts a selection set to a list of enames
  340.   (if f_sel
  341.     (progn
  342.       (if (/= (type f_sel) 'PICKSET)
  343.         (exit)
  344.       )
  345.       (setq f_ss_list nil
  346.             f_loop -1
  347.       )
  348.       (repeat (sslength f_sel)
  349.         (progn
  350.           (setq f_loop (1+ f_loop))
  351.           (princ (strcat "\rSorting "
  352.                          (itoa f_loop)
  353.                          " of "
  354.                          (itoa (sslength f_sel))
  355.                          "     "
  356.                  )
  357.           )
  358.           (setq
  359.             f_ss_list (append f_ss_list (list (ssname f_sel f_loop)))
  360.           )
  361.         )
  362.       )
  363.     )
  364.     nil
  365.   )
  366. )
  367.                                         ;eg (sslist (ssget)) = (<Entity name: 40061d70> <Entity name: 40061d68>)

  368. (defun strrev (f_string / f_cur)        ;reverses a string
  369.   (setq f_cur "")
  370.   (repeat (strlen f_string)
  371.     (progn
  372.       (setq f_cur (strcat f_cur (substr f_string (strlen f_string) 1)))
  373.       (setq f_string (substr f_string 1 (- (strlen f_string) 1)))
  374.     )
  375.   )
  376.   f_cur
  377. )
  378.                                         ;eg (strrev "Hello") = "olleH"

  379. (defun list->string (f_delim f_ls)        ;converts a list of strings to a deliminated string
  380.   (setq f_string "")
  381.   (foreach f_i f_ls
  382.     (progn
  383.       (setq f_string (strcat f_string f_i f_delim))
  384.     )
  385.   )
  386.   (setq f_string (substr f_string 1 (- (strlen f_string) 1)))
  387. )
  388.                                         ;eg (list->string "*" '("1" "2")) = "1*2"


  389. (defun stringp (f_val)                        ;test if a string
  390.   (if (= (type f_val) 'STR)
  391.     t
  392.     nil
  393.   )
  394. )
  395.                                         ;eg (stringp "Hello") = true

  396. (defun realp (f_val)                        ;tests if a real number
  397.   (if (= (type f_val) 'REAL)
  398.     t
  399.     nil
  400.   )
  401. )
  402.                                         ;eg (realp 1.0) = true

  403. (defun intp (f_val)                        ;tests if an integer
  404.   (if (= (type f_val) 'INT)
  405.     t
  406.     nil
  407.   )
  408. )
  409.                                         ;eg (intp 1) = true

  410. (defun strconv (f_ls)                        ;converts elements of a list to a list of strings
  411.   (if (null (listp f_ls))
  412.     (exit)
  413.   )
  414.   (setq f_loop 0)
  415.   (while (and (>= f_loop 0) (< f_loop (length f_ls)))
  416.     (setq f_cur (car f_ls))
  417.     (cond
  418.       ((stringp f_cur)
  419.        (setq f_ls (append (cdr f_ls) (list f_cur)))
  420.       )
  421.       ((realp f_cur)
  422.        (setq f_ls (append (cdr f_ls) (list (rtos f_cur))))
  423.       )
  424.       ((intp f_cur)
  425.        (setq f_ls (append (cdr f_ls) (list (itoa f_cur))))
  426.       )
  427.       (t (setq f_loop -2))
  428.     )
  429.     (setq f_loop (1+ f_loop))
  430.   )
  431.   (if (>= f_loop 0)
  432.     f_ls
  433.     nil
  434.   )
  435. )
  436.                                         ;eg (strconv '(1 2.5 "h")) = ("1" "2.5" "h")

  437. (defun replace (f_oldstr f_newstr f_string / f_cur f_loop)
  438.                                         ;like subst but with strings not lists
  439.   (if (null (and (stringp f_oldstr)
  440.                  (stringp f_newstr)
  441.                  (stringp f_string)
  442.             )
  443.       )
  444.     (exit)
  445.   )
  446.   (if (> (strlen f_oldstr) (strlen f_string))
  447.     (exit)
  448.   )
  449.   (setq f_loop 1)
  450.   (repeat (strlen f_string)
  451.     (progn
  452.       (setq f_cur (substr f_string f_loop (strlen f_oldstr)))
  453.       (if (= f_cur f_oldstr)
  454.         (setq f_string (strcat (substr f_string 1 (- f_loop 1))
  455.                                f_newstr
  456.                                (substr f_string
  457.                                        (+ f_loop (strlen f_oldstr))
  458.                                        (strlen f_string)
  459.                                )
  460.                        )
  461.         )
  462.       )
  463.       (setq f_loop (1+ f_loop))
  464.     )
  465.   )
  466.   f_string
  467. )
  468.                                         ;eg (replace "\t" " " "Line one\tLine two") = "Line one Line two"

  469. (defun strtype (f_string)                ;returns type of data represented by a string, real int or string
  470.   (if (not (stringp f_string))
  471.     (exit)
  472.   )
  473.   (setq        f_test nil
  474.         f_loop 1
  475.   )
  476.   (repeat (strlen f_string)
  477.     (setq f_cur (substr f_string f_loop 1))
  478.     (cond
  479.       ((= (ascii f_cur) 45)
  480.        (if (= f_loop 1)
  481.          (setq f_test "REAL")
  482.          (setq f_test "STRING")
  483.        )
  484.       )
  485.       ((= (ascii f_cur) 46)
  486.        (if (/= f_test "STRING")
  487.          (setq f_test "REAL")
  488.        )
  489.       )
  490.       ((and (>= (ascii f_cur) 48) (<= (ascii f_cur) 57))
  491.        (if (and (/= f_test "STRING") (/= f_test "REAL"))
  492.          (setq f_test "INT")
  493.        )
  494.       )
  495.       (t (setq f_test "STRING"))
  496.     )
  497.     (setq f_loop (1+ f_loop))
  498.   )
  499.   f_test
  500. )
  501.                                         ;eg (strtype "1.5") = "REAL"

  502. (defun c:blktxt        ()                        ;converts text representing co-ordinates to a block
  503.   (setq f_all (ssget "_x" '((0 . "TEXT"))))
  504.   (if (null f_all)
  505.     (exit)
  506.   )
  507.   (setq f_all (sslist f_all))
  508.   (foreach f_i f_all
  509.     (progn
  510.       (setq f_tmp (entget i))
  511.       (if (/= (strtype (cdr (assoc 1 f_tmp))) "STRING")
  512.         (progn
  513.           (setq f_x (cadr (assoc 10 f_tmp)))
  514.           (setq f_y (caddr (assoc 10 f_tmp)))
  515.           (setq f_z (atof (cdr (assoc 1 f_tmp))))
  516.           (setq f_ins (list f_x f_y f_z))
  517.           (command "-insert"
  518.                    "pl"
  519.                    f_ins
  520.                    ""
  521.                    ""
  522.                    ""
  523.                    (cdr (assoc 1 f_tmp))
  524.                    ""
  525.                    ""
  526.           )
  527.         )
  528.       )
  529.     )
  530.   )
  531.   (princ)
  532. )

  533. (defun c:ca (/ f_sel f_pt1 f_pt2 f_pt3 f_pt4 f_test f_osmode)
  534.                                         ;similar to align tool but can copy item
  535.   (setq f_osmode -1)
  536.   (princ "\nSelect Object(s): ")
  537.   (while (null (setq f_sel (ssget))))
  538.   (setq f_pt1 (getpoint "\rSelect First Source Point: "))
  539.   (setq f_pt2 (getpoint "\rSelect First Destination Point: "))
  540.   (setq f_pt3 (getpoint "\rSelect Second Source Point:     "))
  541.   (setq f_pt4 (getpoint "\rSelect Second Destination Point: "))
  542.   (if (not
  543.         (or (null f_pt1) (null f_pt2) (null f_pt3) (null f_pt4))
  544.       )
  545.     (progn
  546.       (initget "Yes No")
  547.       (setq f_test (getkword "\nScale Objects [Yes/No]<Yes>: "))
  548.       (if (null f_test)
  549.         (setq f_test "Yes")
  550.       )
  551.       (if (< (getvar "osmode") 16384)
  552.         (progn
  553.           (setq f_osmode (getvar "osmode"))
  554.           (setvar "osmode" (+ f_osmode 16384))
  555.         )
  556.       )
  557.       (command "copy" f_sel "" f_pt1 f_pt1)
  558.       (if (= f_test "Yes")
  559.         (command "scale"
  560.                  f_sel
  561.                  ""
  562.                  f_pt1
  563.                  "r"
  564.                  f_pt1
  565.                  f_pt3
  566.                  (distance f_pt2 f_pt4)
  567.         )
  568.       )
  569.       (command "ucs" "z" f_pt2 f_pt4)
  570.       (command "rotate"
  571.                f_sel
  572.                ""
  573.                (trans f_pt1 0 1)
  574.                "r"
  575.                (trans f_pt1 0 1)
  576.                (trans f_pt3 0 1)
  577.                "0"
  578.       )
  579.       (command "ucs" "p")
  580.       (command "move" f_sel "" f_pt1 f_pt2)
  581.       (if (/= f_osmode -1)
  582.         (setvar "osmode" f_osmode)
  583.       )
  584.     )
  585.   )
  586.   (princ)
  587. )

  588. (defun c:lbo (/ f_ent f_col f_layer)        ;changes colour of layer to same as selected object
  589.   (setq f_ent (entsel "\nselect object: "))
  590.   (if (null f_ent)
  591.     (exit)
  592.   )
  593.   (setq f_ent (entget (car f_ent)))
  594.   (if (assoc 62 f_ent)
  595.     (setq f_col (assoc 62 f_ent))
  596.     (exit)
  597.   )
  598.   (if (or (= (cdr f_col) 0) (= (cdr f_col) 256))
  599.     (exit)
  600.   )
  601.   (setq f_layer (entget (tblobjname "Layer" (cdr (assoc 8 f_ent)))))
  602.   (entmod (subst f_col (assoc 62 f_layer) f_layer))
  603.   (entmod (subst (cons 62 256) (assoc 62 f_ent) f_ent))
  604.   (princ)
  605. )

  606. (defun right (f_string f_len)                ;returns x number of characters from right of string
  607.   (if (and (stringp f_string) (intp f_len))
  608.     (if        (and (> f_len 0) (<= f_len (strlen f_string)))
  609.       (substr f_string (1+ (- (strlen f_string) f_len)) f_len)
  610.       (progn (princ "Out of Range") (princ))
  611.     )
  612.     (progn (princ "Usage: right <string> <integer>") (princ))
  613.   )
  614. )
  615.                                         ;eg (right "AutoCAD" 3) = "CAD"

  616. (defun left (f_string f_len)                ;returns x number of characters from left of string
  617.   (if (and (stringp f_string) (intp f_len))
  618.     (if        (and (> f_len 0) (<= f_len (strlen f_string)))
  619.       (substr f_string 1 f_len)
  620.       (progn (princ "Out of Range") (princ))
  621.     )
  622.     (progn (princ "Usage: right <string> <integer>") (princ))
  623.   )
  624. )
  625.                                         ;eg (left "Hello" 4) = "Hell"

  626. (defun multiline (f_string f_maxlen)        ;converts a string to a list where each element
  627.                                         ;has a length no greater than maxlen
  628.   (if (null (stringp f_string))
  629.     (exit)
  630.   )
  631.   (if (null (intp f_maxlen))
  632.     (exit)
  633.   )
  634.   (setq f_strout nil)
  635.   (while (< f_maxlen (strlen f_string))
  636.     (setq f_newstr (substr f_string 1 f_maxlen))
  637.     (setq f_oldstr (substr f_string (+ f_maxlen 1) (strlen f_string)))
  638.     (while (and        (/= (right f_newstr 1) " ")
  639.                 (/= (left f_oldstr 1) " ")
  640.                 (mid " " f_newstr)
  641.            )
  642.       (setq f_oldstr (strcat (right f_newstr 1) f_oldstr))
  643.       (setq f_newstr (substr f_newstr 1 (- (strlen f_newstr) 1)))
  644.     )
  645.     (setq f_string f_oldstr)
  646.     (setq f_strout (append f_strout (list f_newstr)))
  647.   )
  648.   (setq f_strout (append f_strout (list f_string)))
  649. )
  650.                                         ;

  651. (defun stringcase (f_string f_code / f_cur f_i)
  652.                                         ;converts case of string, 2 Upper case initial lower
  653.                                         ;case rest, 1 lower case, else uppercase
  654.   (if (null c:functions)
  655.     (load "functions.vlx")
  656.   )
  657.   (if (null f_code)
  658.     (setq f_code 0)
  659.   )
  660.   (if (or (null (stringp f_string)) (null (intp f_code)))
  661.     (exit)
  662.   )
  663.   (cond
  664.     ((= f_code 1) (setq f_string (strcase f_string t)))
  665.     ((= f_code 2)
  666.      (progn
  667.        (setq f_cur "")
  668.        (setq f_string (string->list f_string))
  669.        (foreach        f_i f_string
  670.          (progn
  671.            (setq f_i (strcat (strcase (substr f_i 1 1))
  672.                              (strcase (substr f_i 2 (strlen f_i)) t)
  673.                      )
  674.            )
  675.            (setq f_cur (strcat f_cur " " f_i))
  676.          )
  677.        )
  678.        (setq f_string (substr f_cur 2 (strlen f_cur)))
  679.      )
  680.     )
  681.     (t (setq f_string (strcase f_string)))
  682.   )
  683.   f_string
  684. )
  685.                                         ;eg (stringcase "hello world" 2) = "Hello World"

  686. (defun foreachss (f_var f_ssset f_fun / f_loop)
  687.                                         ;function with three parameters variable name,selection set and function
  688.   (if (and (eq (type f_var) 'STR)        ;check for valid values
  689.            (eq (type f_ssset) 'PICKSET)
  690.            (eq (type f_fun) 'LIST)
  691.       )
  692.     (progn
  693.       (setq f_loop 0)                        ;intitialise counter
  694.       (while (< f_loop (sslength f_ssset))
  695.                                         ;iterate through each item in selection set
  696.         (set (read f_var) (ssname f_ssset f_loop))
  697.                                         ;populate varible with name provided with ename from selection set
  698.         (eval f_fun)                        ;preform funtion on ename
  699.         (setq f_loop (1+ f_loop))        ;next iteration
  700.       )
  701.     )
  702.   )
  703.   (princ)                                ;exit quietly
  704. )
  705.                                         ;eg (foreachss "i" (ssget) '(entdel i)) this will delete all of the
  706.                                         ;selected entities
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-2-17 22:42:37 | 显示全部楼层
来个说明吗,不知何用呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-18 23:14 , Processed in 0.401965 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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