| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Радиус скругления по диаметру

Радиус скругления по диаметру

Ответ
Поиск в этой теме
Непрочитано 03.06.2023, 13:09 #1
Радиус скругления по диаметру
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 495

Всем привет!
Есть лисп, который должен делать сопряжение двух стержней по заданному диаметру.
Список диаметров и радиусов сопряжения представлены в лиспе, но не пойму зачем там
[/color] ... [color="green"], наверное, должен выделять сопряжение цветом...
Не могу проверить, т.к. выдаёт ошибку ; ошибка: no function definition: [COLOR=
Помогите, пожалуйста, исправить лисп, выделение цветом как-бы не надо... С уважением и спасибо...

Код:
[Выделить все]
 (defun c:RZ ( / l i r )
(setq l '((6 8 10 12 16 20 25 32 36 40) (12 16 20 24 32 40 75 96 108 120)))

(initget 1 (apply 'strcat (mapcar ''((x)(strcat(itoa x) " "))(car l))))
;(initget 1 "6 8 10 12 16 20 25 32 36 40 "); same validation 

(and
(setq i (getkword "\nEnter size? ")) 
(setq r (cadr (assoc (atoi i) (apply 'mapcar (cons 'list l))))) ;Doug Wilson's transpose
;((6 12) (8 16) (10 20) (12 24) (16 32) (20 40) (25 75) (32 96) (36 108) (40 120)) 

(setvar 'filletrad r)) ;new fillet radius value, r 
(vl-cmdf "_FILLET" "p") ;invoke command fillet
(princ)
 )
Ниже. см. пост #14 выложены 4 лиспа для сопряжения линий заданным радиусом для арматуры А240, А300, А400, А500, А600.

Миниатюры
Нажмите на изображение для увеличения
Название: RZ.png
Просмотров: 76
Размер:	5.6 Кб
ID:	256425  Нажмите на изображение для увеличения
Название: RZ2.png
Просмотров: 78
Размер:	5.3 Кб
ID:	256426  


Последний раз редактировалось Ingpro, 19.06.2023 в 18:59.
Просмотров: 1504
 
Непрочитано 03.06.2023, 13:19
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Откуда код копировал-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.06.2023, 13:22
#3
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


www.cadtutor.net
А что с ним не так?
https://www.cadtutor.net/forum/topic...nding-factors/

Последний раз редактировалось Ingpro, 03.06.2023 в 13:38.
Ingpro вне форума  
 
Непрочитано 03.06.2023, 13:25
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Ты мне предлагаешь весь сайт лопатить, чтобы найти этот код? Конкретную ссылку, откуда копировал, давай.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.06.2023, 13:40
#5
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
предлагаешь весь сайт лопатить
В коде #1 подправлены значения радиусов, остальное - как в оригинале.
Ingpro вне форума  
 
Непрочитано 03.06.2023, 13:43
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


<...>
---
Без проверок:
Код:
[Выделить все]
 (defun c:test (/ l i r) 
  (setq l '((6 8 10 12 16 20 25 32 36 40) (20 24 32 36 48 60 75 96 108 120)))

  (initget 1 (apply 'strcat (mapcar ''((x) (strcat (itoa x) " ")) (car l))))
  ;(initget 1 "6 8 10 12 16 20 25 32 36 40 "); same validation

  (and 
    (setq i (getkword "\nEnter size? "))
    (setq r (cadr (assoc (atoi i) (apply 'mapcar (cons 'list l))))) ;Doug Wilson's transpose
    ;((6 20) (8 24) (10 32) (12 36) (16 48) (20 60) (25 75) (32 96) (36 108) (40 120))

    (setvar 'filletrad r)
  ) ;new fillet radius value, r
  (vl-cmdf "_FILLET" "p") ;invoke command fillet
  (princ)
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 03.06.2023 в 14:00.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.06.2023, 14:23
#7
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Без проверок:
Этот код работает, спасибо, Алексей!
Ingpro вне форума  
 
Непрочитано 03.06.2023, 15:34
#8
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от Ingpro Посмотреть сообщение
[/color] ... [color="green"]
это типо раскрашивание цветом языкового синтаксиса. убивать!
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 03.06.2023, 17:09
#9
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


Цитата:
Сообщение от koMon Посмотреть сообщение
раскрашивание цветом языкового синтаксиса
А в чем это выражается, поясните, если несложно, или потестить какой-нибудь рабочий код с [/color].
И ещё... Можно в код из поста #6 добавить функцию, чтобы в одном сеансе можно было скруглить несколько пар стержней
с одним диаметром, например, в замкнутых хомутах - 4 угла, чтобы один раз выбрать диаметр и выбрать 2 стержня-скруглить, опять 2 стержня - скруглить с тем же диаметром...
Или хотя бы запомнить выбранный диаметр из предыдущего сеанса...

Последний раз редактировалось Ingpro, 03.06.2023 в 17:35.
Ingpro вне форума  
 
Непрочитано 03.06.2023, 20:31
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Цитата:
Сообщение от Ingpro Посмотреть сообщение
потестить какой-нибудь рабочий код с [/color]
Попытаться на этом форуме создать новый пост, внутрь которого вставить код с [color][/color], не обрамляя его тэгом [code]. В предварительном просмотре (скорее всего) все будет нормально.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.06.2023, 14:26
#11
nikkomp


 
Регистрация: 08.09.2013
Сообщений: 21


Здраствуйте а можно ли зациклить скругление, как нибудь типа через while, чтобы он каждый раз после скругления, запрос не делал? а делал только после выхода из цикла,
вот к примеру как этот lisp
Код:
[Выделить все]
(defun C:DimSSF (/ adoc ss shg fld str)
;;;Dim Step Size to Field
;;;VVA for dwg.ru
;;;http://forum.dwg.ru/showthread.php?t=103609
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  ) ;_ end of vla-startundomark
  (while (not (eq shg "Выход"))
    (if (not (numberp *DimSSF_SHG*))
      (initget 8 "Выход")
      (initget 6 "Выход")
    ) ;_ end of if
    (if (not (numberp *DimSSF_SHG*))
      (setq shg (getint "\nШаг [Выход]: "))
      (setq
        shg (getint
              (strcat "\nШаг [Выход] < " (itoa *DimSSF_SHG*) " >: ")
            ) ;_ end of getint
      ) ;_ end of setq
    ) ;_ end of if
    (if (null shg)
      (setq shg *DimSSF_SHG*)
    ) ;_ end of if
    (setq *DimSSF_SHG* shg)
    (if (not (eq shg "Выход"))
      (progn
        (while (= (type (setq ss (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (ssget "_:L" '((0 . "DIMENSION"))) ;_ end of ssget
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
               'pickset
            ) ;_ end of =
          (foreach en
                   (mapcar
                     (function vlax-ename->vla-object)
                     (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
                   ) ;_ end of mapcar
            (setq fld (strcat
                        "%<\\AcExpr ("
                        "%<\\AcObjProp Object(%<\\_ObjId "
                        (vl-princ-to-string
                          (Get-ObjectID-x86-x64 en)
                        ) ;_ vl-princ-to-string
                        ">%).Measurement \\f \"%lu2\">%"
                        "/"
                        (itoa shg)
                        ") \\f \"%lu2%pr0\">%"
                      ) ;_ strcat
            ) ;_ setq
            (setq str (strcat fld "x" (itoa shg) "=<>"))
            (vl-catch-all-apply
              (function
                (lambda ()
                  (vla-put-textoverride en str)
                ) ;_ end of lambda
              ) ;_ end of function
            ) ;_ end of vl-catch-all-apply
            (vl-cmdf "_updatefield" (vlax-vla-object->ename en) "")

          ) ;_ end of foreach
        ) ;_ end of while
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of while
  (vla-endundomark adoc)
  (princ)
) ;_ end of defun

;;--------------------------------------------------------
;; Функция получает строковое представление ObjectID
;; вне зависимости от того AutoCAD x86 или x64
;; Источник: "Field and objectid problem"

;;http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/Field-and-objectid-problem/m-p/2478592/highlight/true#M276818
;; http://forum.dwg.ru/showthread.php?t=51822
;;--------------------------------------------------------
(defun Get-ObjectID-x86-x64 (obj / util)
  (setq util (vla-get-utility
               (vla-get-activedocument (vlax-get-acad-object))
             ) ;_ end of vla-get-Utility
  ) ;_ end of setq
  (if (= (type obj) 'ENAME)
    (setq obj (vlax-ename->vla-object obj))
  ) ;_ end of if
  (if (= (type obj) 'VLA-OBJECT)
    (if (> (vl-string-search "x64" (getvar "platform")) 0)
      (vlax-invoke-method
        util
        "GetObjectIdString"
        obj
        :vlax-false
      ) ;_ end of vlax-invoke-method
      (rtos (vla-get-objectid obj) 2 0)
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun
nikkomp вне форума  
 
Автор темы   Непрочитано 15.06.2023, 16:08
#12
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


Цитата:
Сообщение от nikkomp Посмотреть сообщение
можно ли зациклить скругление, как нибудь типа через while,
чтобы в одном сеансе можно было скруглить несколько пар стержней с одним диаметром.
Ув. профи, помогите в лисп из поста #6 добавить выбор рамкой нескольких стержней.
Ingpro вне форума  
 
Непрочитано 16.06.2023, 16:47
#13
nikkomp


 
Регистрация: 08.09.2013
Сообщений: 21


Цитата:
Сообщение от Ingpro Посмотреть сообщение
чтобы в одном сеансе можно было скруглить несколько пар стержней с одним диаметром.
Ув. профи, помогите в лисп из поста #6 добавить выбор рамкой нескольких стержней.
Ну в этом точно не помогут я как то просил подобное https://forum.dwg.ru/showthread.php?p=1910148&
В принципе это не просто https://dwg.ru/b/klisp/408
nikkomp вне форума  
 
Автор темы   Непрочитано 16.06.2023, 16:48
#14
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


Если кому интересно, выкладываю 4 лиспа для сопряжения линий заданным радиусом для арматуры А240, А300 - лисп А2;
для арматуры А400 - лисп А4; для арматуры А500, А600 - лисп А5; для арматуры Вр1 - лисп В1.
Вызываем команду, выбираем радиус арматуры для сопряжения. Затем смотрим текст в командной строке:
"Выберите первый объект или [оТменить/полИлиния/раДиус/Обрезка/Несколько]:"
выбираем Н (Несколько) и в одном сеансе выбираем несколько пар стержней (только по одному, а не рамкой)...
Расчет радиусов загиба арматуры выполнен по таблице 10.4 СП 70.13330.2012 Несущие и ограждающие конструкции.
Вложения
Тип файла: lsp А2.lsp (714 байт, 5 просмотров)
Тип файла: lsp А4.lsp (740 байт, 6 просмотров)
Тип файла: lsp А5.lsp (746 байт, 7 просмотров)
Тип файла: lsp В1.lsp (511 байт, 4 просмотров)

Последний раз редактировалось Ingpro, 16.06.2023 в 22:15.
Ingpro вне форума  
 
Автор темы   Непрочитано 16.06.2023, 22:05
#15
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


Цитата:
Сообщение от nikkomp Посмотреть сообщение
Ну в этом точно не помогут я как то просил подобное
Тогда выбираем "Несколько", см. пост #14.
Ingpro вне форума  
 
Непрочитано 21.06.2023, 11:10
#16
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


Цитата:
Сообщение от Ingpro Посмотреть сообщение
4 лиспа
а сделать выбор диаметров/радиусов скругления по типу арматуры не?
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 21.06.2023, 14:06
#17
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


Цитата:
Сообщение от koMon Посмотреть сообщение
а сделать выбор диаметров/радиусов скругления по типу арматуры не?
А это как?
Ingpro вне форума  
 
Непрочитано 21.06.2023, 15:19
#18
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,680


как-то так
Код:
[Выделить все]
 
;****************************************************************************

(defun check_real (number multiplier_1 multiplier_2 / check_number)
	(if (> (setq check_number (* multiplier_1 number multiplier_2))
		   (fix check_number)
		)
			(1+ (fix check_number))
			check_number
	)
)

;****************************************************************************

(defun set_bend_radii (diam_list rf_type_string)
	(cond
		(
			(member rf_type_string '("А240" "А300"))
				(mapcar '(lambda (diam) (check_real diam 0.5 2.5))
						 diam_list
				)
		)
		(
			(= "А400" rf_type_string)
				(mapcar '(lambda (diam) (if (> 20 diam)
												(check_real diam 1 2)
												(check_real diam 1 3)
										)
						 )
						 diam_list
				)
		)
		(
			(= "А500" rf_type_string)
				(mapcar '(lambda (diam) (if (> 20 diam)
												(check_real diam 0.5 6)
												(check_real diam 0.5 7)
										)
						 )
						 diam_list
				)
		)
		(
			(= "ВР-1" rf_type_string)
				(mapcar '(lambda (diam) (check_real diam 1 2))
						 diam_list
				)
		)
	)
)

;****************************************************************************

(defun c:fill_it (/ rf_diam_saved rf_type_saved diam_list diam_list bend_radius)
	(if (null rf_diam)
			(setq rf_diam_saved "")
			(setq rf_diam_saved (itoa rf_diam))

	)
	(if (null rf_type)
			(setq rf_type_saved "")
			(setq rf_type_saved rf_type)

	)
	(initget "А240 А300 А400 А500 ВР-1")
	(if (null (setq rf_type (getkword (strcat "\Выберите тип арматуры [А240/А300/А400/А500/ВР-1] <"
											  rf_type_saved
											  ">: "
									  )
						    )
			  )
		)
		(setq rf_type rf_type_saved)
	)
	(if (= "ВР-1" rf_type)
		(setq diam_list '(3 4 5))
		(setq diam_list '(6 8 10 12 14 16 18 20 22 25 28 32 36 40))
	)
	(while (and
				(if (= rf_diam_saved "")
						(null (initget 7))
						(null (initget 6))
				)
			  	(if (setq rf_diam (getint (strcat "\nВыберите диаметр арматуры ["
			  										(substr (apply 'strcat (mapcar '(lambda (diam) (strcat "/" (itoa diam))) diam_list)) 2)
			  										"] <"
			  										rf_diam_saved
			  										 ">: "
			  							  )
			  					  )
			  		)
					t t
				)
				(if (null rf_diam)
					(setq rf_diam (atoi rf_diam_saved))
					(setq rf_diam_saved (itoa rf_diam))
				)
				(null (member rf_diam diam_list))
				(princ "Неверный диаметр арматуры!")
		   )
	)
	(setq bend_radius (nth (vl-position rf_diam diam_list) (set_bend_radii diam_list rf_type)))
	(initcommandversion)
	(command-s "_.fillet" "_r" bend_radius "_m" pause) 
)

;****************************************************************************

__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 21.06.2023, 15:30
#19
Ingpro


 
Регистрация: 11.07.2022
Сообщений: 495


koMon, это СУПЕР! Я так не умею... СПАСИБО!!!
Ingpro вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Радиус скругления по диаметру

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трассирование. Наименьший радиус кривой в плане Der Ingenieur Автомобильные и железные дороги, мосты, тоннели и организация движения 5 03.02.2023 09:54
Минимальный радиус разворота автомобиля в подземном паркинге. Гаджимурад Архитектура 5 08.02.2019 13:02
Revit Structure для конструктора (проблемы проектирования) professor_off Revit 5168 26.08.2015 16:48
Как автоматически выставить радиус скругления в зависимости от угла между отрезками Seryj_Wolk Программирование 16 22.05.2015 16:31
Как скруглить грань (с переменным радиусом скругления)? Alexn AutoCAD 3 31.10.2004 00:51