Написать комментарии к коду - Lisp

Узнай цену своей работы

Формулировка задачи:

Помогите плс нужно написать комментарии к коду подсчет общий длины линии (для AutoCAD)
Листинг программы
  1. (if (not (= (substr (ver) 1 11) "Visual LISP")) (load "acad2006doc.lsp"))
  2. ;; Silent load.
  3. (princ)
  4.  
  5. (defun c:an (/ string string1 string2 nums is num i vla_txt)
  6. (vl-load-com)
  7. (setq higth (getint "\nВведите высоту текста..."))
  8. (setq nums (getint "\nВведите стартовый номер..."))
  9. (setq is (getint "\nВведите кол-во..."))
  10. (setq string1 (getstring "\nВведите начало текста..."))
  11. (setq string2 (getstring "\nВведите окончание текста..."))
  12. (setq string (strcat string1 (rtos nums 2 0) string2))
  13. (setq vla_txt1
  14. (vla-addtext
  15. (vla-get-modelspace
  16. (vla-get-activedocument (vlax-get-acad-object))
  17. )
  18. string
  19. (vlax-3d-point
  20. (getpoint "\nУкажите точку вставки текста...")
  21. )
  22. higth;высота
  23. )
  24. )
  25. (while (< num is)
  26. (setq num (+ 1 nums ))
  27. (setq nums num)
  28. (setq string (strcat string1 (rtos nums 2 0) string2))
  29. vla_txt1
  30. (vla-addtext
  31. (vla-get-modelspace
  32. (vla-get-activedocument (vlax-get-acad-object))
  33. )
  34. string
  35. (vlax-3d-point
  36. (getpoint "\nУкажите точку вставки текста...")
  37. )
  38. higth;высота
  39. )
  40. );while
  41. )
  42.  
  43. (defun C:Dlina (/ Nab Sum i Curve Param)
  44. (vl-load-com)
  45. (if (setq Nab (ssget))
  46. (progn
  47. (setq Sum 0 i 0 value 0)
  48. (repeat (sslength Nab)
  49. (setq Curve (vlax-ename->vla-object (ssname Nab i))
  50. i (1+ i)
  51. Param (vl-catch-all-apply 'vlax-curve-getEndParam
  52. (list Curve))
  53. )
  54. (if (not (vl-catch-all-error-p Param))
  55. (setq Sum (+ Sum (vlax-curve-getDistAtParam Curve
  56. Param)))
  57. )
  58. )
  59. )
  60. )
  61. (princ (strcat "\nСумма длин выбранных элементов равна: " (rtos
  62. Sum 2 2)))
  63. (setq value (rtos Sum 2 2))
  64. (alert (strcat "Сумма = " value))
  65. (prin1)
  66. )
  67.  
  68. ;;;функция для нумерации.
  69. ;;;вводите начальное число
  70. ;;;выбираете предварительно подготовленный текст по порядку
  71. ;;;программа увеличивает выбранное число на 1 от предыдущего
  72. (defun c:plus1(/ s n g a name string1 string2)
  73. (setq Name 0)
  74. (setq i 1)
  75. (setq s (getint "\nВведите первый номер:"))
  76. (setq i (getint "\nВведите Шаг:"))
  77. (setq string1 (getstring T "\nВведите начало текста..."))
  78. (setq string2 (getstring T "\nВведите окончание текста..."))
  79. ; (if (i=nil) (setq i 1))
  80. ;(princ (strcat "\nСу " (rtos i 2 2)))
  81. (while Name
  82. (setq Name (car (entsel "\nУкажите текст или [Enter]:")))
  83. (if Name
  84. (if (= (cdr (assoc '0 (entget Name))) "TEXT")
  85. (progn
  86. (setq n (entget name))
  87. (print n)
  88. (setq str (strcat string1 (rtos s 2 0) string2 ) )
  89. (setq g (cons 1 str ) )
  90. (entmod (subst g (assoc '1 n) n))
  91. (setq s (+ i s))
  92. );progn
  93. );if
  94. );if
  95. );while
  96. );defun
  97.  
  98. ;;;функция для нумерации.
  99. ;;;вводите начальное число
  100. ;;;выбираете предварительно подготовленный текст по порядку
  101. ;;;программа увеличивает выбранное число на 1 от предыдущего
  102. (defun c:plus1m(/ s n g a name string1 string2)
  103. (setq Name 0)
  104. (setq i 1)
  105. (setq s (getint "\nВведите первый номер:"))
  106. (setq i (getint "\nВведите Шаг:"))
  107. (setq string1 (getstring T "\nВведите начало текста..."))
  108. (setq string2 (getstring T "\nВведите окончание текста..."))
  109. (while Name
  110. (setq Name (car (entsel "\nУкажите текст или [Enter]:")))
  111. (if Name
  112. (if (= (cdr (assoc '0 (entget Name))) "MTEXT")
  113. (progn
  114. (setq n (entget name))
  115. (print n)
  116. (setq str (strcat string1 (rtos s 2 0) string2 ) )
  117. (setq g (cons 1 str ) )
  118. (entmod (subst g (assoc '1 n) n))
  119. (setq s (+ i s))
  120. );progn
  121. );if
  122. );if
  123. );while
  124. );defun
  125.  
  126. (defun c:z-calc-text-value (/ value ent obj ss)
  127. (vl-load-com)
  128. (princ
  129. "\nВыберите текстовые объекты среди которых будет произведененна калькуляция"
  130. ) ;_ princ
  131. (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  132. (if (not ss)
  133. (princ "Не выбраны объекты")
  134. (progn
  135. (setq
  136. value (rtos
  137. (apply
  138. (function +)
  139. (mapcar
  140. (function
  141. (lambda (a)
  142. (atof
  143. (vl-string-trim
  144. "%Uu {\\Ll}"
  145. (vl-string-subst
  146. "."
  147. ","
  148. (cdr (assoc 1 (entget a)))
  149. ) ;_ vl-string-subst
  150. ) ;_ vl-string-trim
  151. ) ;_ atof
  152. ) ;_ lambda
  153. ) ;_ function
  154. (vl-remove-if
  155. (function listp)
  156. (mapcar (function cadr)
  157. (ssnamex ss)
  158. ) ;_ mapcar
  159. ) ;_ vl-remove-if
  160. ) ;_ mapcar
  161. ) ;_ apply
  162. ) ;_ rtos
  163. ) ;_ setq
  164. (if (vl-string-position (ascii ".") value)
  165. (setq value (vl-string-right-trim ".0" value))
  166. ) ;_ if
  167. (princ (strcat "\n Сумма = " value))
  168. (alert (strcat "Сумма = " value))
  169. (setvar "ERRNO" 0)
  170. (while
  171. (and (not (setq ent
  172. (car
  173. (nentsel
  174. (strcat
  175. "\n Выберите текстовый объект для записи значения <Выход>:"
  176. ) ;_ strcat
  177. ) ;_ entsel
  178. ) ;_ car
  179. ) ;_ setq
  180. ) ;_ not
  181. (equal (getvar "ERRNO") 7)
  182. ) ;_ and
  183. (setvar "ERRNO" 0)
  184. ) ;_ while
  185. (if (and ent
  186. (vlax-property-available-p
  187. (setq obj (vlax-ename->vla-object ent))
  188. 'TextString
  189. ) ;_ vlax-property-available-p
  190. ) ;_ and
  191. (progn
  192. (vlax-put-property obj 'TextString value)
  193. (vlax-release-object obj)
  194. ) ;_ progn
  195. ) ;_ if
  196. ) ;_ progn
  197. ) ;_ if
  198. (princ)
  199. ) ;_ defun

Решение задачи: «Написать комментарии к коду»

textual
Листинг программы
  1. (defun C:DLINA (/ Nab Sum i Curve Param value)
  2.   (vl-load-com)
  3.   (if (setq Nab (ssget)) ;_ Если выбран набор
  4.     (progn
  5.       (setq Sum 0
  6.             i   0
  7.       ) ;_ Устанавливаем сумму и счетчик в ноль
  8.       (repeat (sslength Nab) ;_ Для каждого объекта в наборе
  9.         (setq Curve (vlax-ename->vla-object (ssname Nab i))
  10.               i     (1+ i)
  11.               Param (vl-catch-all-apply ;_ находим его конечный параметр
  12.                       'vlax-curve-getEndParam
  13.                       (list Curve)
  14.                     )
  15.         )
  16.         (if (not (vl-catch-all-error-p Param))
  17.           (setq Sum (+ Sum ;_ и, если он (объект) имеет длину, прибавляем ее к общей сумме
  18.                        (vlax-curve-getDistAtParam Curve Param)
  19.                     )
  20.           )
  21.         )
  22.       )
  23.     )
  24.   )
  25.   (princ (strcat "\nСумма длин выбранных элементов равна: "
  26.                  (rtos Sum 2 2)
  27.          )
  28.   ) ;_ а затем сумму выводим в ком.строку
  29.  
  30.   (setq value (rtos Sum 2 2))
  31.   (alert (strcat "Сумма = " value)) ;_ и во всплывающее сообщение
  32.  
  33.   (prin1) ;_ и наконец выходим по-тихому
  34. )

Объяснение кода листинга программы

В этом коде представлена функция, которая вычисляет сумму длин выбранных элементов в наборе. Вот список действий, которые выполняет код:

  1. Загрузка визуального лайаута.
  2. Проверка, выбран ли набор.
  3. Если выбран, инициализация суммы и счетчика.
  4. Для каждого объекта в наборе: a. Получение объекта. b. Получение конечного параметра объекта. c. Если конечный параметр получен без ошибок, прибавление его длины к сумме.
  5. Если ни один конечный параметр не получен без ошибок, вывод суммы длин в командную строку.
  6. Сохранение значения суммы в переменной.
  7. Вывод значения суммы во всплывающее окно.
  8. Выход из функции.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут