dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > 3D Konstruktor для проектировщиков КМ.

3D Konstruktor для проектировщиков КМ.

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 26.06.2008, 00:48 #1
3D Konstruktor для проектировщиков КМ.
Дима_
 
Продуман
 
Питер
Регистрация: 22.02.2007
Сообщений: 2,838

Дима_ вне форума Вставить имя

За неопределенное количество времени сформировалось вот такое "чудо", в разработке сильно помогли (сами возможно того не осознавая)
многие участники сего форума - за что им отдельное спасибо. Запускаеться командой konstruktor, разработка велась в 2008. Критика приветствуеться.
Код:
[Выделить все]
;Программа Конструктор v1.0 создана в помощь проектировщикам металлоконструкций
;Автор Жуков Дмитрий, май 2008.
(defun c:konstruktor ( / dyn dynp tmp)
(vl-load-com)
(setq dyn (getvar "dynmode") dynp (getvar "dynprompt"))
(setvar "dynmode" 3) (setvar "dynprompt" 1); Режим отображения подсказок
(if (= tablestyle nil) (setq tablestyle "Standard"))
(while (/= tmp "4")
(setq tmp (menu "Что будем делать"
(list "1 Создать новый элемент" "2 Построение" "3 Подсчет" "4 Выход")))
(cond 
((= tmp "1") (new))
((= tmp "2") (create))
((= tmp "3") (props))
);end of cond Что будем делать
);end of while
(setvar "dynmode" dyn) (setvar "dynprompt" dynp)
);end of Konstruktor

(defun create (/ tmp)
(while (/= tmp "Назад")
(setq tmp (menu "Тип элемента" (list "Прокатный" "Единичный" "Назад")))
(cond
((= tmp "Прокатный") (profil))
((= tmp "Единичный") (ed))
);end of cond
);end of while
);end of create

(defun props ( / tmp)
(setq tmp (menu "Посчитать все или быстрый подсчет" (list "Быстрый подсчет" "Создать таблицы" "Настройка")))
(cond 
((= tmp "Быстрый") (progn
(setq tmp (entsel "Выберите элемент <или назад>"))
(while (/= tmp nil)
(prop (car tmp))
(setq tmp (entsel "Выберите элемент <или назад>"))
);end of while
))
((= tmp "Создать") (total))
((= tmp "Настройка" (settabl)))
):end of cond
);end of props

(defun settabl (/ tmp)
(setq tmp (getstring (strcat "Введите имя стиля таблиц <" tablestyle "> ")))
(if (/= tmp "") (setq tablestyle tmp))
);end of defun

(defun total (/ pt n tmp obj ln led lpr)
(setq obj (entnext))
(while (/= obj nil)
(setq tmp (getinsertprop obj "ED"))
(if (/= tmp nil)
(progn
(if (= (assoc tmp led) nil)
(setq led (append led (list (list tmp 1 (atof (getinsertprop obj "Massa"))))))
(setq led (subst 
(list tmp (1+ (cadr (assoc tmp led))) (+ (atof (getinsertprop obj "Massa")) (caddr (assoc tmp led))))
(assoc tmp led);старое значение
led));end of subst & setq
);end of if
);end of progn
);end of if
(setq tmp (getinsertprop obj "Profile"))
(if (/= tmp nil)
(progn
(if (= (assoc tmp lpr) nil)
(setq lpr (append lpr (list (list tmp 1 (cdr (assoc 43 (entget obj))) (atof (getinsertprop obj "Massa"))))))
(setq lpr (subst 
(list tmp ;Имя
(1+ (cadr (assoc tmp lpr))) ;Количество
(+ (cdr (assoc 43 (entget obj))) (caddr (assoc tmp lpr)));длинна
(+ (atof (getinsertprop obj "Massa")) (nth 3 (assoc tmp lpr)))) ; Масса
(assoc tmp lpr);старое значение
lpr));end of subst & setq
);end of if
);end of progn
);end of if
(setq obj (entnext obj))
);end of while
(if (/= lpr nil)
(progn
(setq pt (getpoint "Точка вставки таблицы проката"))
(command "_-table" 4 (length lpr) "_s" tablestyle pt)
(setq obj (vlax-ename->vla-object (entlast))
n 0
);end of setq
(vla-settext obj 0 0 "Прокат")
(vla-settext obj 1 0 "Профиль") (vla-settext obj 1 1 "Количество")
(vla-settext obj 1 2 "Длинна мм") (vla-settext obj 1 3 "Масса кг")
(setq lpr (sortlist lpr))
(repeat (length lpr)
(vla-settext obj (+ 2 n) 0 (car (nth n lpr)))
(vla-settext obj (+ 2 n) 1 (cadr (nth n lpr)))
(vla-settext obj (+ 2 n) 2 (caddr (nth n lpr)))
(vla-settext obj (+ 2 n) 3 (nth 3 (nth n lpr)))
(setq n (1+ n))
);end of pereat
));end of progn & if
(if (/= led nil)
(progn
(setq pt (getpoint "Точка вставки таблицы изделий"))
(command "_-table" 3 (length led) "_s" tablestyle pt)
(setq obj (vlax-ename->vla-object (entlast))
n 0
);end of setq
(vla-settext obj 0 0 "Элементы")
(vla-settext obj 1 0 "Изделие") (vla-settext obj 1 1 "Количество") (vla-settext obj 1 2 "Масса кг")
(setq led (sortlist led))
(repeat (length led)
(vla-settext obj (+ 2 n) 0 (car (nth n led)))
(vla-settext obj (+ 2 n) 1 (cadr (nth n led)))
(vla-settext obj (+ 2 n) 2 (caddr (nth n led)))
(setq n (1+ n))
);end of pereat
));end of progn & if
);end of total

(defun ed ( / lobj obj)
(setq obj (tblnext "block" T))
(while (/= obj nil)
(if (= (car (getblockattrib (cdr (assoc 2 obj)))) "ED")
(setq lobj (append lobj (list (cadr (getblockattrib (cdr (assoc 2 obj)))))))
);end of if
(setq obj (tblnext "block"))
);end of while
(if (/= lobj nil)
(progn
(setq
lobj (append (acad_strlsort lobj) (list "Регулировка ПСК" "Назад"))
obj (menu "Выберите элемент" lobj)
);end of setq
(while (/= obj "Назад")
(if (= obj "Регулировка") (SetUcs) (command "_-insert" obj pause 1 1 pause))
(setq obj (menu "Выберите элемент" lobj))
);end of while
);end of progn
(alert "Отсутствуют единичные элементы")
);end of if
);end of ed

(defun SetUcs ( / tmp)
(setq tmp (menu "Выберите ПСК" (list "1 Мировая" "2 Z ось" "3 Отмена")))
(cond
((= tmp "1") (command "_ucs" "_w"))
((= tmp "2") (command "_ucs" "_zaxis" pause pause))
);end of cond
);end of setucs

(defun sortlist (lst / n ln tmp); Сортирует список списков по первым элементам.
(foreach n lst (setq ln (append ln (list (car n)))))
(setq ln (acad_strlsort ln))
(foreach n ln (setq tmp (append tmp (list (assoc n lst)))))
tmp
);end of sortlist

(defun new (/ tmp)
(while (/= tmp "9")
(setq tmp (menu "Выберите тип создаваемого элемента"
(list "1 Швеллер" "2 Уголок" "3 Труба круглая" "4 Труба прямоугольная" "5 Болт" "6 Гайка" "7 Шайба" "8 Хомут" "9 Назад")
));end of menu & setq
(cond 
((= tmp "1") (shveller))
((= tmp "2") (Ugol))
((= tmp "3") (Truba))
((= tmp "4") (Truba1))
((= tmp "5") (Bolt))
((= tmp "6") (Gayka))
((= tmp "7") (Shayba))
((= tmp "8") (Homut))
);end of while
);end of cond Что будем делать
);end of new

(defun Shveller (/ tmp tmp1 lst)
(setq tmp (menu "Швеллер по ГОСТ 8240-97 или новый:"
(list "5П" "6.5П" "8П" "10П" "12П" "14П" "16П" "16аП" "18П" "18аП" "20П" "22П" "24П" "27П" "30П" "33П" "36П" "40П" 
"Свои параметры")
));end of menu & setq
(setq lst
(cond
((= tmp "5П") (list 50 32 3.5 6.0 7.0 4.4))
((= tmp "6.5П") (list 65 36 3.5 6 7.2 4.4))
((= tmp "8П") (list 80 40 3.5 6.5 7.5 4.5))
((= tmp "10П") (list 100 46 4.0 7.0 7.6 4.5))
((= tmp "12П") (list 120 52 4.5 7.5 7.8 4.8))
((= tmp "14П") (list 140 58 4.5 8.0 8.1 4.9))
((= tmp "16П") (list 160 64 5.0 8.5 8.4 5.0))
((= tmp "16аП") (list 160 68 5.0 8.5 9.0 5.0))
((= tmp "18П") (list 180 70 5.0 9.0 8.7 5.1))
((= tmp "18аП") (list 180 74 5.0 9.0 9.3 5.1))
((= tmp "20П") (list 200 76 5.5 9.5 9.0 5.2))
((= tmp "22П") (list 220 82 6.0 10.0 9.5 5.4))
((= tmp "24П") (list 240 90 6.0 10.5 10.0 5.6))
((= tmp "27П") (list 270 95 6.5 11.0 10.5 6.0))
((= tmp "30П") (list 300 100 7.0 12.0 11.0 6.5))
((= tmp "33П") (list 330 105 7.5 13.0 11.7 7.0))
((= tmp "36П") (list 360 110 8.5 14.0 12.6 7.5))
((= tmp "40П") (list 400 115 9.0 15.0 13.5 8.0))
((= tmp "Свои") (setq tmp (getstring "Введите название профиля: ")
		tmp1 (getparam (list "Ширина " "Высота " "Малый радиус "
				"Большой радиус " "Толщина полки " "Толщина основания "))))
));end of cond & setq
(shvel (strcat "Швеллер" tmp) (nth 0 lst) (nth 1 lst) (nth 2 lst) (nth 3 lst) (nth 4 lst) (nth 5 lst))
);end of shveller


(defun Ugol (/ ch tmp tmp1 lst)
(setq ch (menu "Диапазон размеров" (list "20-50" "56-80" "90-140" "160-250" "1 Неравнополочные"
"2 Неравнополочные или свои параметры"
)))

(cond
((= ch "20-50")
(progn 
(setq tmp (menu "Уголок с 20 по 50 по ГОСТ 8509-93:"
(list "20x20x3" "20x20x4" "25x25x3" "25x25x4" "28x28x3" "30x30x3" "30x30x4" "32x32x3"
"32x32x4" "35x35x3" "35x35x4" "35x35x5" "40x40x3" "40x40x4" "40x40x5" "45x45x3" "45x45x4" "45x45x5"
"50x50x3" "50x50x4" "50x50x5" "50x50x6")
));end of menu & setq
(setq lst
(cond
((= tmp "20x20x3") (list 20 20 1.2 3.5 3))
((= tmp "20x20x4") (list 20 20 1.2 3.5 4))
((= tmp "25x25x3") (list 25 25 1.2 3.5 3))
((= tmp "25x25x4") (list 25 25 1.2 3.5 4))
((= tmp "28x28x3") (list 28 28 1.3 4.0 3))
((= tmp "30x30x3") (list 30 30 1.3 4.0 3))
((= tmp "30x30x4") (list 30 30 1.3 4.0 4))
((= tmp "32x32x3") (list 32 32 1.5 4.5 3))
((= tmp "32x32x4") (list 32 32 1.5 4.5 4))
((= tmp "35x35x3") (list 35 35 1.5 4.5 3))
((= tmp "35x35x4") (list 35 35 1.5 4.5 4))
((= tmp "35x35x5") (list 35 35 1.5 4.5 5))
((= tmp "35x35x6") (list 35 35 1.5 4.5 6))
((= tmp "40x40x3") (list 40 40 1.7 5.0 3))
((= tmp "40x40x4") (list 40 40 1.7 5.0 4))
((= tmp "40x40x5") (list 40 40 1.7 5.0 5))
((= tmp "45x45x3") (list 45 45 1.7 5.0 3))
((= tmp "45x45x4") (list 45 45 1.7 5.0 4))
((= tmp "45x45x5") (list 45 45 1.7 5.0 5))
((= tmp "50x50x3") (list 50 50 1.8 5.5 3))
((= tmp "50x50x4") (list 50 50 1.8 5.5 4))
((= tmp "50x50x5") (list 50 50 1.8 5.5 5))
((= tmp "50x50x6") (list 50 50 1.8 5.5 6))
));end of cond & setq
));end of progn & 20-50

((= ch "56-80")
(progn 
(setq tmp (menu "Уголок с 56 по 80 по ГОСТ 8509-93:"
(list "56x56x4" "56x56x5" "63x63x4" "63x63x5" "63x63x6" "70x70x4.5" "70x70x5" "70x70x6" "70x70x7" "70x70x8"
"75x75x5" "75x75x6" "75x75x7" "75x75x8" "75x75x9" "80x80x5.5" "80x80x6" "80x80x7" "80x80x8")
));end of menu & setq
(setq lst
(cond
((= tmp "56x56x4") (list 56 56 2.0 6.0 4))
((= tmp "56x56x5") (list 56 56 2.0 6.0 5))
((= tmp "63x63x4") (list 63 36 2.3 7.0 4))
((= tmp "63x63x5") (list 63 36 2.3 7.0 5))
((= tmp "63x63x6") (list 63 36 2.3 7.0 6))
((= tmp "70x70x4.5") (list 70 70 2.7 8.0 4.5))
((= tmp "70x70x5") (list 70 70 2.7 8.0 5))
((= tmp "70x70x6") (list 70 70 2.7 8.0 6))
((= tmp "70x70x7") (list 70 70 2.7 8.0 7))
((= tmp "70x70x8") (list 70 70 2.7 8.0 8))
((= tmp "75x75x5") (list 75 75 3.0 9.0 5))
((= tmp "75x75x6") (list 75 75 3.0 9.0 6))
((= tmp "75x75x7") (list 75 75 3.0 9.0 7))
((= tmp "75x75x8") (list 75 75 3.0 9.0 8))
((= tmp "75x75x9") (list 75 75 3.0 9.0 9))
((= tmp "80x80x5.5") (list 80 80 3.0 9.0 5.5))
((= tmp "80x80x6") (list 80 80 3.0 9.0 6))
((= tmp "80x80x7") (list 80 80 3.0 9.0 7))
((= tmp "80x80x8") (list 80 80 3.0 9.0 8))
));end of cond & setq
));end of progn & 56-80


((= ch "90-140")
(progn 
(setq tmp (menu "Уголок с 90 по 140 по ГОСТ 8509-93:"
(list "90x90x6" "90x90x7" "90x90x8" "90x90x9" "100x100x6.5" "100x100x7" "100x100x8" "100x100x9" "100x100x10"
"100x100x12" "100x100x14" "100x100x16" "110x110x7" "110x110x8" "125x125x8" "125x125x9" "125x125x10"
"125x125x12" "125x125x14" "125x125x16" "140x140x9" "140x140x10" "140x140x12")
));end of menu & setq
(setq lst
(cond
((= tmp "90x90x6") (list 90 90 3.3 10 6))
((= tmp "90x90x7") (list 90 90 3.3 10 7))
((= tmp "90x90x8") (list 90 90 3.3 10 8))
((= tmp "90x90x9") (list 90 90 3.3 10 9))
((= tmp "100x100x6.5") (list 100 100 4 12 6.5))
((= tmp "100x100x7") (list 100 100 4 12 7))
((= tmp "100x100x8") (list 100 100 4 12 8))
((= tmp "100x100x10") (list 100 100 4 12 10))
((= tmp "100x100x12") (list 100 100 4 12 12))
((= tmp "100x100x14") (list 100 100 4 12 14))
((= tmp "100x100x16") (list 100 100 4 12 16))
((= tmp "110x110x7") (list 110 110 4 12 7))
((= tmp "110x110x8") (list 110 110 4 12 8))
((= tmp "125x125x8") (list 125 125 4.6 14 8))
((= tmp "125x125x9") (list 125 125 4.6 14 9))
((= tmp "125x125x10") (list 125 125 4.6 14 10))
((= tmp "125x125x12") (list 125 125 4.6 14 12))
((= tmp "125x125x14") (list 125 125 4.6 14 14))
((= tmp "125x125x16") (list 125 125 4.6 14 16))
((= tmp "140x140x9") (list 140 140 4.6 14 9))
((= tmp "140x140x10") (list 140 140 4.6 14 10))
((= tmp "140x140x12") (list 140 140 4.6 14 12))
));end of cond & setq
));end of progn & 90-140

((= ch "160-250")
(progn 
(setq tmp (menu "Уголок с 160 по 250 по ГОСТ 8509-93:"
(list "160x160x10" "160x160x11" "160x160x12" "160x160x14" "160x160x16" "160x160x18" "160x160x20"
"180x180x11" "180x180x12"
"200x200x12" "200x200x13" "200x200x14" "200x200x16" "200x200x20" "200x200x25" "200x200x30"
"220x220x14" "220x220x16"  
"250x250x16" "250x250x18" "250x250x20" "250x250x22" "250x250x25" "250x250x28" "250x250x30" "250x250x35")
));end of menu & setq
(setq lst
(cond
((= tmp "160x160x10") (list 160 160 5.3 16 10))
((= tmp "160x160x11") (list 160 160 5.3 16 11))
((= tmp "160x160x12") (list 160 160 5.3 16 12))
((= tmp "160x160x14") (list 160 160 5.3 16 14))
((= tmp "160x160x16") (list 160 160 5.3 16 16))
((= tmp "160x160x18") (list 160 160 5.3 16 18))
((= tmp "160x160x20") (list 160 160 5.3 16 20))
((= tmp "180x180x11") (list 180 180 5.3 16 11))
((= tmp "180x180x12") (list 180 180 5.3 16 12))
((= tmp "200x200x12") (list 200 200 6.0 18 12))
((= tmp "200x200x13") (list 200 200 6.0 18 13))
((= tmp "200x200x14") (list 200 200 6.0 18 14))
((= tmp "200x200x15") (list 200 200 6.0 18 16))
((= tmp "200x200x20") (list 200 200 6.0 18 20))
((= tmp "200x200x25") (list 200 200 6.0 18 25))
((= tmp "200x200x30") (list 200 200 6.0 18 30))
((= tmp "220x220x14") (list 220 220 7.0 21 14))
((= tmp "220x220x16") (list 220 220 7.0 21 16))
((= tmp "250x250x16") (list 250 250 8.0 24 16))
((= tmp "250x250x18") (list 250 250 8.0 24 18))
((= tmp "250x250x20") (list 250 250 8.0 24 20))
((= tmp "250x250x22") (list 250 250 8.0 24 22))
((= tmp "250x250x25") (list 250 250 8.0 24 25))
((= tmp "250x250x28") (list 250 250 8.0 24 28))
((= tmp "250x250x30") (list 250 250 8.0 24 30))
((= tmp "250x250x35") (list 250 250 8.0 24 35))
));end of cond & setq
));end of progn & 160-250

((= ch "1")
(progn 
(setq tmp (menu "Уголок с 25 по 90 по ГОСТ 8510-86:"
(list "25x16x3" "32x20x3" "32x20x4"
"40x25x3" "40x25x4" "40x25x5"
"45x28x3" "45x28x4"
"50x32x3" "50x32x4"
"56x36x4" "56x36x5"
"63x40x4" "63x40x5" "63x40x6" "63x40x8"
"70x45x5"
"75x50x5" "75x50x6" "75x50x8"
"80x50x5" "80x50x6"
"90x56x5.5" "90x56x6" "90x56x8")
));end of menu & setq
(setq lst
(cond
((= tmp "25x16x3") (list 25 16 1.2 3.5 3))
((= tmp "32x20x3") (list 32 20 1.2 3.5 3))
((= tmp "32x20x4") (list 32 20 1.2 3.5 4))
((= tmp "40x25x3") (list 40 25 1.3 4.0 3))
((= tmp "40x25x4") (list 40 25 1.3 4.0 4))
((= tmp "40x25x5") (list 40 25 1.3 4.0 5))
((= tmp "45x28x3") (list 45 28 1.7 5.0 3))
((= tmp "45x28x4") (list 45 28 1.7 5.0 4))
((= tmp "50x32x3") (list 50 32 1.8 5.5 3))
((= tmp "50x32x4") (list 50 32 1.8 5.5 4))
((= tmp "56x36x4") (list 56 36 2.0 6.0 4))
((= tmp "56x36x5") (list 56 36 2.0 6.0 5))
((= tmp "63x40x4") (list 63 40 2.3 7.0 4))
((= tmp "63x40x5") (list 63 40 2.3 7.0 5))
((= tmp "63x40x6") (list 63 40 2.3 7.0 6))
((= tmp "63x40x8") (list 63 40 2.3 7.0 8))
((= tmp "70x45x5") (list 70 45 2.5 7.5 5))
((= tmp "75x50x5") (list 75 50 2.7 8.0 5))
((= tmp "75x50x6") (list 75 50 2.7 8.0 6))
((= tmp "75x50x8") (list 75 50 2.7 8.0 8))
((= tmp "80x50x5") (list 80 50 2.7 8.0 5))
((= tmp "80x50x6") (list 80 50 2.7 8.0 6))
((= tmp "90x56x5.5") (list 90 56 3.0 9.0 5.5))
((= tmp "90x56x6") (list 90 56 3.0 9.0 6))
((= tmp "90x56x8") (list 90 56 3.0 9.0 8))
));end of cond & setq
));end of progn & 1 неравнополочные

((= ch "2")
(progn 
(setq tmp (menu "Уголок с 100 по 200 по ГОСТ 8510-86 или новый:"
(list "100x63x6" "100x63x7" "100x63x8" "100x63x10"
"110x70x6.5" "110x70x8"
"125x80x7" "125x80x8" "125x80x10" "125x80x12"
"140x90x8" "140x90x10"
"160x100x9" "160x100x10" "160x100x12" "160x100x14"
"180x110x10" "180x110x12"
"200x125x11" "200x125x12" "200x125x14" "200x125x16"
"Свои параметры")
));end of menu & setq
(setq lst
(cond
((= tmp "100x63x6") (list 100 63 3.3 10 6))
((= tmp "100x63x7") (list 100 63 3.3 10 7))
((= tmp "100x63x8") (list 100 63 3.3 10 8))
((= tmp "100x63x10") (list 100 63 3.3 10 10))
((= tmp "110x70x6.5") (list 110 70 3.3 10 6.5))
((= tmp "110x70x8") (list 110 70 3.3 10 8))
((= tmp "125x80x7") (list 125 80 3.7 11 7))
((= tmp "125x80x8") (list 125 80 3.7 11 8))
((= tmp "125x80x10") (list 125 80 3.7 11 10))
((= tmp "125x80x12") (list 125 80 3.7 11 12))
((= tmp "140x90x8") (list 140 90 4 12 8))
((= tmp "140x90x10") (list 140 90 4 12 10))
((= tmp "160x100x9") (list 160 100 4.3 13 9))
((= tmp "160x100x10") (list 160 100 4.3 13 10))
((= tmp "160x100x12") (list 160 100 4.3 13 12))
((= tmp "160x100x14") (list 160 100 4.3 13 14))
((= tmp "180x110x10") (list 180 110 4.7 14 10))
((= tmp "180x110x12") (list 180 110 4.7 14 12))
((= tmp "200x125x11") (list 200 125 4.7 14 11))
((= tmp "200x125x12") (list 200 125 4.7 14 12))
((= tmp "200x125x14") (list 200 125 4.7 14 14))
((= tmp "200x125x16") (list 200 125 4.7 14 16))
((= tmp "Свои") (setq tmp (getstring "Введите название профиля: ")
		tmp1 (getparam (list "Ширина " "Высота " "Малый радиус " "Большой радиус " "Толщина "))))
));end of cond & setq
));end of progn & 2 неравнополочные или новый

);end of cond CH 
(ugolok (strcat "УголокL" tmp) (nth 0 lst) (nth 1 lst) (nth 2 lst) (nth 3 lst) (nth 4 lst))
);end of Ugol

(defun Truba ( / tmp tmp1)
(setq 
tmp (getreal " Введите внешний диаметр трубы: ")
tmp1 (getreal " Введите толщину стенки трубы: ")
);end of setq
(if (> tmp (* tmp1 2.0)); проверка параметров
(trub (strcat "Труба" (rtos tmp) "x" (rtos tmp1)) tmp tmp1)
(alert "Несовместимые параметры")
);end of if
);end of Truba

(defun Truba1 ( / a b c )
(setq
a (getreal " Введите ширину: ")
b (getreal " Введите высоту: ")
c (getreal " Введите толщину: ")
);end of setq
(if (and
(> a (* c 2.0))
(> b (* c 2.0))
);end of and -  проверка параметров
(trub1 (strcat "Прям" (rtos a) "x" (rtos b) "x" (rtos c)) a b c)
(alert "Несовместимые параметры")
);end of if
);end of Truba1

(defun Bolt (/ tmp lst len)
(setq
tmp (menu "Выберайте (по ГОСТ 7798-70):  " (list "M12" "M16" "M20" "M24" "M30" "M36" "M42" "M48"))
lst (cond
((= tmp "M12") (list 12 20.9 8 19))
((= tmp "M16") (list 16 26.5 10 24))
((= tmp "M20") (list 20 33.3 13 30))
((= tmp "M24") (list 24 39.6 15 36))
((= tmp "M30") (list 30 50.9 19 46))
((= tmp "M36") (list 36 60.8 23 55))
((= tmp "M42") (list 42 72.1 26 65))
((= tmp "M48") (list 48 83.4 30 75))
);end of cond
len (getreal "Длина шпильки: ")
);end of setq
(bolts (strcat "Болт" tmp "-" (rtos len)) (nth 0 lst) len (nth 1 lst) (nth 2 lst) (nth 3 lst))
);end of Bolt

(defun Gayka (/ tmp lst)
(setq
tmp (menu "Выберайте (по ГОСТ 5915-70): " (list "M12" "M16" "M20" "M24" "M30" "M36" "M42" "M48"))
lst (cond
((= tmp "M12") (list 12 20.9 10 19))
((= tmp "M16") (list 16 26.5 13 24))
((= tmp "M20") (list 20 33.3 16 30))
((= tmp "M24") (list 24 39.6 19 36))
((= tmp "M30") (list 30 50.9 24 46))
((= tmp "M36") (list 36 60.8 29 55))
((= tmp "M42") (list 42 72.1 34 65))
((= tmp "M48") (list 48 83.4 38 75))
);end of cond
);end of setq
(gyk (strcat "Гайка" tmp) (nth 0 lst) (nth 1 lst) (nth 2 lst) (nth 3 lst))
);end of Gayka

(defun Shayba (/ tmp lst)
(setq
tmp (menu "Выберайте (по ГОСТ 11371-78): " (list "M12" "M16" "M20" "M24" "M30" "M36" "M42" "M48"))
lst (cond
((= tmp "M12") (list 24 13 2.5))
((= tmp "M16") (list 30 17 3))
((= tmp "M20") (list 37 21 4))
((= tmp "M24") (list 44 25 4))
((= tmp "M30") (list 56 31 5))
((= tmp "M36") (list 66 37 6))
((= tmp "M42") (list 78 43 6))
((= tmp "M48") (list 90 50 8))
);end of cond
);end of setq
(shb (strcat "Шайба" tmp) (nth 0 lst) (nth 1 lst) (nth 2 lst))
);end of Shayba

(defun homut ( / lst)
(setq lst (getparam (list " Введите общую длинну: " " Введите обхватываемый диаметр: " 
" Введите диаметр шпильки: ")))
(if (> (nth 1 lst) (* (nth 2 lst) 2))
(hmt 
(strcat "Хомут" (rtos (car lst)) "x" (rtos (cadr lst)) "x" (rtos (caddr lst)))
(car lst) (cadr lst) (caddr lst)
);end of hmt
(alert "Несовместимые параметры")
);end of if
);end of homut

(defun menu (name lvar); Выводит запрос name и выбор вариантов lvar, возвращает выбранный
(initget (apply 'strcat (mapcar '(lambda (x) (strcat x " ")) lvar)))
(getkword (strcat "\n " name "[" (apply 'strcat (mapcar '(lambda (x) (strcat x "/")) lvar)) "]"))
);end of menu

(defun getparam (lparam / lst n); Запрашивает параметы с подскасками из lparam
(setq n 0)
(repeat (length lparam)
(setq lst (append lst (list (getreal (nth n lparam)))))
(setq n (1+ n))
);end of repeat
lst
);end of getparam

(defun makeblock (name lobj pt attrib / tmp names n); создает блок из списка объектов lobj с именем name
;(или скрытый "*Uxxx" при name nil), базовой точкой pt и списком
;атрибутов attrib (list "Имя атрибута" "значение по умолчанию" ...)
(if (= attrib nil) (setq tmp 0) (setq tmp 2)); есть ли аттрибуты
(if (= name nil) (setq names "*123" tmp (1+ tmp)) (setq names name)); скрытый блок
(entmakex (list (cons 0 "BLOCK") (cons 2 names) (append (list 10) pt) (cons 70 tmp)))
(setq n 0)
(repeat (length lobj)
(entmakex (cdr (entget (nth n lobj))))
(setq n (1+ n))
);end of repeat
(if (/= tmp 0);
(progn
(setq n 0)
(repeat (/ (length attrib) 2)
(entmakex (list
(cons 0 "ATTDEF") (cons 100 "AcDbEntity") (cons 100 "AcDbText")
(list 10 0.0 0.0 0.0) (cons 1 (nth (1+ n) attrib)) (cons 100 "AcDbAttributeDefinition")
(cons 2 (nth n attrib)) (cons 70 9) 
));end of entmakex attdef
(setq n (+ n 2))
);end of repeat
);end of progn
);end of if
(entmakex (list (cons 0 "ENDBLK"))) 
(setq n 0)
(repeat (length lobj)
(entdel (nth n lobj))
(setq n (1+ n))
);end of repeat
(alert "Блок создан")
);end of makeblock

(defun extr (obj); выдавливает на 1 obj возращает (list newobj, объем нового тела)
(command "_extrude" obj "" 1)
(list (entlast) (vla-get-volume (vlax-ename->vla-object (entlast))))
);end of extr

(defun ugolok (name a b c d e / obj lst)
(setq
lst (list '(0 0));pt1
lst (append lst (list (list a 0)));pt2
lst (append lst (list (list a e)));pt3
lst (append lst (list (list e e)));pt4
lst (append lst (list (list e b)));pt5
lst (append lst (list (list 0 b)));pt6
obj (cadr (filetpoly (pl lst) (list 3 c 4 d 5 c)))
obj (extr obj)
);end of setq
(makeblock nil (list (car obj)) '(0 0 0) (list "Profile" name "Volume" (rtos (cadr obj))))
);end of ugolok

(defun shvel (name a b c d e f / obj lst)
(setq
lst (list '(0 0));pt1
lst (append lst (list (list a 0)));pt2
lst (append lst (list (list a b)));pt3
lst (append lst (list (list (- a e) b)));pt4
lst (append lst (list (list (- a e) f)));pt5
lst (append lst (list (list e f)));pt6
lst (append lst (list (list e b)));pt7
lst (append lst (list (list 0 b)));pt8
obj (cadr (filetpoly (pl lst) (list 4 c 5 d 6 d 7 c)))
obj (extr obj)
);end of setq
(makeblock nil (list (car obj)) (list (/ a 2.0) 0 0) (list "Profile" name "Volume" (rtos (cadr obj))))
);end of shvel

(defun trub (name a b / obj obj1 vol); Создает трубу наружным диаметром a и толщиной b.
(setq  	
obj (extr (entmakex (list (cons 0 "CIRCLE") (cons 40 (/ a 2.0)) (list 10 0 0 0))));Внешний круг
obj1 (extr (entmakex (list (cons 0 "CIRCLE") (cons 40 (- (/ a 2.0) b)) (list 10 0 0 0))));Внутренний круг
);end of setq
(command "_subtract" (car obj) "" (car obj1) "")
(setq vol (- (cadr obj) (cadr obj1)) obj (entlast))
(makeblock nil (list obj) '(0 0 0) (list "Profile" name "Volume" (rtos vol)))
);end of trub

(defun trub1 (name a b c / vol obj obj1 lst lst1); создает прямоугольную трубу a*b, толщиной с
(setq 
lst (list '(0 0));pt1
lst (append lst (list (list 0 b)));pt2
lst (append lst (list (list a b)));pt3
lst (append lst (list (list a 0)));pt4
lst1 (list (list c c));pt1
lst1 (append lst1 (list (list c (- b c))));pt2
lst1 (append lst1 (list (list (- a c) (- b c))));pt3
lst1 (append lst1 (list (list (- a c) c)));pt4
obj (extr (cadr (filetpoly (pl lst) (list 1 (* c 2.0) 2 (* c 2.0) 3 (* c 2.0) 4 (* c 2.0)))))
obj1 (extr (cadr (filetpoly (pl lst1) (list 1 c 2 c 3 c 4 c))))
);end of setq
(command "_subtract" (car obj) "" (car obj1) "")
(setq vol (- (cadr obj) (cadr obj1)) obj (entlast))
(makeblock nil (list obj) (list (/ a 2.0) 0 0) (list "Profile" name "Volume" (rtos vol)))
);end of trub

(defun bolts (name m l d h s / a b c obj oldosmode)
(command "_ucs" "_w")
(if 	(not (zerop (setq oldosmode (getvar "osmode"))))
	(setvar "osmode" (logior oldosmode 16384)))
(command "_cylinder" '(0 0 0) (/ m 2.0) (- 0 l))
(setq a (entlast))
(command "_cylinder" '(0 0 0) (/ d 2.0) h)
(setq b (entlast))
(command "_polygon" 6 '(0 0 0) "_c" (/ s 2.0))
(command "_extrude" (entlast) "" h 0)
(setq c (entlast))
(command "_intersect" c b "")
(setq c (entlast))
(command "_union" a c "")
(setq obj (entlast))
(setvar "osmode" oldosmode)
(makeblock name (list obj) '(0 0 0) (list "ED" name "Massa"
		(rtos (* 0.0000075251 (vla-get-volume (vlax-ename->vla-object obj))))))
(command "_ucs" "_p")
);end of bolts

(defun gyk (name m d h s / a b c obj oldosmode)
(command "_ucs" "_w")
(if 	(not (zerop (setq oldosmode (getvar "osmode"))))
	(setvar "osmode" (logior oldosmode 16384)))
(command "_cylinder" '(0 0 0) (/ m 2.0) h)
(setq a (entlast))
(command "_cylinder" '(0 0 0) (/ d 2.0) h)
(setq b (entlast))
(command "_polygon" 6 '(0 0 0) "_c" (/ s 2.0))
(command "_extrude" (entlast) "" h 0)
(setq c (entlast))
(command "_intersect" c b "")
(setq c (entlast))
(command "_subtract" c "" a"")
(setq obj (entlast))
(setvar "osmode" oldosmode)
(makeblock name (list obj) '(0 0 0) (list "ED" name "Massa"
		(rtos (* 0.0000075251 (vla-get-volume (vlax-ename->vla-object obj))))))
(command "_ucs" "_p")
);end of gyk


(defun shb (name a b c / obj obj1 )
(command "_ucs" "_w")
(setq  	
obj (entmakex (list (cons 0 "CIRCLE") (cons 40 (/ a 2.0)) (list 10 0 0 0)));Внешний круг
obj1 (entmakex (list (cons 0 "CIRCLE") (cons 40 (/ b 2.0)) (list 10 0 0 0)));Внутренний круг
);end of setq
(command "_extrude" obj "" c)
(setq obj (entlast))
(command "_extrude" obj1 "" c)
(command "_subtract" obj "" (entlast) "")
(setq obj (entlast))
(makeblock name (list obj) '(0 0 0) (list "ED" name "Massa"
		(rtos (* 0.00000785 (vla-get-volume (vlax-ename->vla-object obj))))))
(command "_ucs" "_p")
);end of shb

(defun hmt (name a b c / obj obj1 obj2 obj3)
(setq  
obj (pl (list 
(list (- (+ (/ b 2.0) (/ c 2.0))) (- (+ (/ b 2.0) c) a))
(list (- (+ (/ b 2.0) (/ c 2.0))) (+ (/ b 2.0) (/ c 2.0)))
(list (+ (/ b 2.0) (/ c 2.0)) (+ (/ b 2.0) (/ c 2.0)))
(list (+ (/ b 2.0) (/ c 2.0)) (- (+ (/ b 2.0) c) a))
));end of list & pl
);end of setq
(entmod (subst (cons 70 0) (assoc 70 (entget obj)) (entget obj))); размыкает направляющую
(filetpoly obj (list 2 (+ (/ b 2.0) (/ c 2.0)) 3 (+ (/ b 2.0) (/ c 2.0)))); сопрягает
(setq obj1 (entmakex (list
(cons 0 "CIRCLE") (cons 40 (/ c 2.0)) (list 10 (- (+ (/ b 2.0) (/ c 2.0))) 0 (- (+ (/ b 2.0) c) a))
(list 210 0.0 1.0 0.0) ));end of list & entmakex - круг у начала с учетом 3D поворота
obj2 ; первый вспомогательный круг
(entmakex (list (cons 0 "CIRCLE") (cons 40 (/ c 2.0))
(list 10 (+ (/ b -2.0) (/ c -2.0)) 0 (/ b -2.0)) (list 210 0.0 1.0 0.0)))
obj3 ; второй вспомогательный круг
(entmakex (list (cons 0 "CIRCLE") (cons 40 (/ c 2.0))
(list 10 (+ (/ b 2.0) (/ c 2.0)) 0 (/ b -2.0)) (list 210 0.0 1.0 0.0) 
))
);end of setq
(command "_extrude" obj1 "" "_p" obj)
(entdel obj)
(setq obj (entlast))
(makeblock name (list obj obj2 obj3) '(0 0 0) (list "ED" name "Massa"
		(rtos (* 0.00000785 (vla-get-volume (vlax-ename->vla-object obj))))))
);end of hmt


(defun pl (obj / ed n tmp); создает полилинию по списку вершин obj.
(setq 	ed (list (cons 0 "LWPOLYLINE")
		(cons 100 "AcDbEntity")
		(cons 100 "AcDbPolyline")
		(cons 90 (length obj))
		(cons 70 1));end of list
	n 0
	tmp (nth n obj)
);end of setq
(while (/= tmp nil)
(setq 	ed (append ed (list (append (list 10) (nth n obj))))
	n (1+ n)
	tmp (nth n obj)
);end setq 
);end of while
(entmakex ed)
);end pl

;Пример вызова (filetpoly (entlast) '(2 200 3 300 4 400)) вершины распологать ПО ПОРЯДКУ ВОЗРАСТАНИЯ
;возращает список - количество сопряженных вершин, имя объекта. 

(defun FiletPoly (obj lst / n x tmp); Сопрягает вершины полилинии (obj), по параметрам lst.
(setq n 0 x 0)
(repeat (/ (length lst) 2)
(setq tmp (filpl obj (+ (nth n lst) x) (nth (1+ n) lst)))
(if (= tmp nil) (setq x (1+ x)))
(setq n (+ n 2))
);end of repeat
(list x obj)
);end of Filetpoly

;Пример вызова (filpl (entlast) 3 50) - сопряжение 3-тей вершины полилинии радиусом 50.
(defun filpl (polyline vertex R / ugl kf izgib oldtmp nexttmp tmp x nextx n napr tmp obj pt1 pt2 )
(if (and
(>= vertex 1)
(= (cdr (assoc 0 (entget polyline))) "LWPOLYLINE"); проверка полилинии
(> (cdr (assoc 90 (entget polyline))) 2); проверка количества вершин
(>= (cdr (assoc 90 (entget polyline))) vertex); проверка существования запраш. вершины.
(not (and (or (= (cdr (assoc 90 (entget polyline))) vertex) (= vertex 1))(= (cdr (assoc 70 (entget polyline))) 0)))
;проверка первой или последней вершины при незамкнутом контуре
);end of and
(progn 
(setq
n 0
x 0
tmp (nth n (entget polyline))
oldtmp (assoc 10 (reverse (entget polyline)))
);end of setq инициализация данных
(while (/= tmp nil)
(if (= (car tmp) 10) (setq x (1+ x))); подсчет вершин
(if (and (= x vertex) (= (car tmp) 10))
(progn
(setq nextx (1+ n) nexttmp (nth nextx (entget polyline)))
(while (/= (car nexttmp) 10)
(setq nextx (1+ nextx) nexttmp (nth nextx (entget polyline)))
(if (= nexttmp nil) (setq nexttmp (assoc 10 (entget polyline))));проверка на последнею
);end of while нахождение вершины № vertex+1
(setq
ugl 	(- 	(max (angle (cdr tmp) (cdr oldtmp)) (angle (cdr tmp) (cdr nexttmp)))
		(min (angle (cdr tmp) (cdr oldtmp)) (angle (cdr tmp) (cdr nexttmp)))); расчет угла
kf (abs (* (/ (cos (- pi (/ ugl 2.0))) (sin (- pi (/ ugl 2.0)))) r));расчет коэффицента сдвига
pt1 (polar (cdr tmp) (angle (cdr tmp) (cdr oldtmp)) kf); новая координата старой вершины
pt2 (polar (cdr tmp) (angle (cdr tmp) (cdr nexttmp)) kf); координата новой вершины
napr (if 	(and (> (angle pt1 pt2) (angle pt1 (cdr tmp)) )
		(< (- (angle pt1 pt2) pi) (angle pt1 (cdr tmp))))
	(* 1 1)(* -1 1)); направление "выпуклости" дуги
izgib (/ (- r (* r (sin (/ ugl 2)))) (/ (distance pt1 pt2) 2)); расчет изгиба линии
);end of setq

(if (or
(and (> (distance (cdr tmp) (cdr oldtmp)) kf) (> (distance (cdr tmp) (cdr nexttmp)) kf))
(and (> (distance (cdr tmp) (cdr oldtmp)) kf) (equal (distance (cdr tmp) (cdr nexttmp)) kf 1e-6))
(and (equal (distance (cdr tmp) (cdr oldtmp)) kf 1e-6) (> (distance (cdr tmp) (cdr nexttmp)) kf))
(and (equal (distance (cdr tmp) (cdr oldtmp)) kf 1e-6) (equal (distance (cdr tmp) (cdr nexttmp)) kf 1e-6))
);end of or
(setq
obj (append obj (list (append (list 10) pt1) (cons 40 0.0) (cons 41 0.0) (cons 42 (* izgib napr)))); изменение старой вершины
tmp (append (list 10) pt2);добавление новой вершины
);end of setq
(setq kf nil)
);end of if

);end of progn
);end of if
(if (= (car tmp) 10) (setq oldtmp tmp))
(setq 
obj (append obj (list tmp))
n (1+ n)
tmp (nth n (entget polyline)))
);end of while
(if (= kf nil)
"Слишком большой радиус"
(progn (entmod obj) nil)
);end of if
);end of progn
"Неверный объект"
);end of if
);end of filpl

(defun profil ( / lobj lname obj p1 p2); Вставляет прокатный профиль выбранный пользователем
(setq obj (tblnext "block" T))
(while (/= obj nil)
(if (= "Profile" (car (getblockattrib (cdr (assoc 2 obj)))))
(setq 	lobj (append lobj (list (list (cadr (getblockattrib (cdr (assoc 2 obj)))) (cdr (assoc 2 obj)))))
	lname (append lname (list (cadr (getblockattrib (cdr (assoc 2 obj))))))
);end of setq
);end of if
(setq obj (tblnext "block"))
);end of while
(if (/= (length lname) 0)
(progn
(setq lname (append (acad_strlsort lname) (list "Регулировка" "Назад")) lobj (append lobj (list (list "Регулировка" "Регулировка") (list "Назад" "Назад"))))
(while (/= obj "Назад")
(setq obj (cadr (assoc (menu "Выберите прокат" lname) lobj)))
(if (= obj "Регулировка") (profilang) 
(if (/= obj "Назад")
(progn
(setq
p1 (getpoint "Начальная точка ")
p2 (getpoint p1 " Конечная точка ")
p1 (trans p1 1 0)
p2 (trans p2 1 0)
);end of setq
(InsertPrkt p1 p2 obj)
)));end of progn & if*2
);end of while
);end of progn
(alert "Отсутствуют прокатные блоки"));end of if
);end defun

(defun GetBlockAttrib (name / obj lst); Возращает аттрибуты блока именем name
(if (and
	(/= nil (tblsearch "block" name))
	(or
	(= 2 (cdr (assoc 70 (tblsearch "block" name))))
	(= 3 (cdr (assoc 70 (tblsearch "block" name))))
);end of or
);end of and
(progn
(setq obj (cdr (assoc -2 (tblsearch "block" name))))
(while (/= obj nil)
(if (= "ATTDEF" (cdr (assoc 0 (entget obj))))
(setq lst (append lst (list (cdr (assoc 2 (entget obj))) (cdr (assoc 1 (entget obj))))))
);end of if
(setq obj (entnext obj))
);end of while
);end of progn
);end of if
lst
);end of getblockattrib

(defun InsertPrkt (p1 p2 name / n tmp tmp1); Вставляет растянутый блок name с атрибутами. 
(setq n 0)
(if (= (getblockattrib name) nil) (setq tmp 0) (setq tmp 1))
(if (= profang nil) (setq profang 0))
(entmakex (list (cons 0 "insert")
		(cons 66 tmp)
		(append '(10) (trans p1 0 
		(list (- (car p2) (car p1))
		(- (cadr p2) (cadr p1))
		(- (caddr p2) (caddr p1)))))
	(cons 2 name)
	(cons 50 profang)
	(cons 43 (distance p1 p2))
	(list 210 (- (car p2) (car p1)) (- (cadr p2)
	(cadr p1)) (- (caddr p2) (caddr p1)))
	))
(if (/= (getblockattrib name) nil)
(progn
(repeat ( / (length (getblockattrib name)) 2)
(setq
tmp (nth n (getblockattrib name))
tmp1 (nth (1+ n) (getblockattrib name))
);end of setq
(if (= tmp "Volume")
(setq tmp "Massa" tmp1 (rtos (* 0.00000785 (atof tmp1) (distance p1 p2))))
);end of if
(entmakex (list (cons 0 "ATTRIB") (cons 100 "AcDbEntity") (cons 100 "AcDbText")
(list 10 0.0 0.0 0.0) (cons 1 tmp1) (cons 100 "AcDbAttribute")
(cons 2 tmp) (cons 70 9)))
(setq n (+ n 2))
);end of repeat
));end of progn & if
(entmakex (list (cons 0 "seqend")))
);end insertprkt

(defun profilang ( / tmp)
(if (= profang nil) (setq profang 0))
(setq tmp (getangle (strcat "Введите угол профиля: <" (angtos profang) ">")))
(if (/= tmp nil) (setq profang tmp))
);end of profilang

(defun prop ( entblock / obj count countlen countmass); возращает количество блоков entblock и суммарные свойства
(setq 	block (cdr (assoc 2 (entget entblock)))
	obj (entnext)
	count 0
	countlen 0
	countmass 0)
(if (/= block nil) (progn
(while (/= obj nil)
(if (= (cdr (assoc 2 (entget obj))) block)
(setq 
count (1+ count)
countlen (+ countlen (cdr (assoc 43 (entget obj))))
countmass (+ countmass (atof (getinsertprop obj "Massa")))
);end of setq
);end of if
(setq obj (entnext obj))
); end of while
(if (= (car (getblockattrib block)) "Profile")
(setq obj (strcat "Итого " (rtos count) " куска " (cadr (getblockattrib block)) " общей длинной " (rtos countlen)
"мм и массой " (rtos countmass) "кг."))
(setq obj (strcat "Итого " (rtos count) " " (cadr (getblockattrib block)) " общей массой " (rtos countmass) "кг."))
):end of if
(alert obj)
(princ (strcat "\n" obj "\n"))
); end of progn
(alert "Это не блок")
); end of if
); end of prop

(defun getinsertprop (obj prop / lst); Возращает свойство prop вставки obj, при prop=nil все свойства. 
(if (and
	(= (cdr (assoc 0 (entget obj))) "INSERT")
	(= (cdr (assoc 66 (entget obj))) 1)
);end of and
(progn
(setq obj (entnext obj))
(while (/= (cdr (assoc 0 (entget obj))) "SEQEND")
(if (= (cdr (assoc 0 (entget obj))) "ATTRIB")
(setq lst (append lst (list (list (cdr (assoc 2 (entget obj))) (cdr (assoc 1 (entget obj)))))))
);end of if
(setq obj (entnext obj))
);end of while
));end of progn & if
(if (/= prop nil) (setq lst (cadr (assoc prop lst))))
lst
);end of getinsertprop

(princ "\nКонструктор успешно загружен.\nЗапуск командой konstruktor")
(princ)

Вложения
Тип файла: lsp 3dconstr.lsp (34.4 Кб, 626 просмотров)

__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Кулик Алексей aka kpblc, 27.06.2008 в 00:09. Причина: Добавил lsp-файл
Просмотров: 12301
 
Непрочитано 26.06.2008, 09:37
#2
DK


 
Сообщений: n/a


По всей видимости вопрос адресован конструкторам. Вопрос автору. Для чего предназначена программа, что она делает, какие алгоритмы и нормы в ней реализованы?
вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 26.06.2008, 09:56
#3
Вячеслав А

проектировщик КМ
 
Регистрация: 15.12.2006
С.-Петербург
Сообщений: 344


Да, было бы интересно узнать, что сию "чудо" может и как этим пользоваться
Вячеслав А вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 26.06.2008, 10:18
#4
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,244
Отправить сообщение для zenon с помощью ICQ


походу прога отрисовывает конструкции по видимому в 3хмерке и выводит спецификацию на использованные элементы.
Только вот из-за ограниченности сортамента наврядли будет широко использоваться, да при изменении геометрии наврядли таблица пересчитывается. Шибко уж кода мало.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.06.2008, 00:25
#5
Кулик Алексей aka kpblc
Moderator

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


Еще несколько замечаний:
  1. Нет отлова ошибок и восстановления значений системных переменных.
  2. Нет меток начала и конца отмены.
  3. В версиях до 2005 включительно работать не будет. А проверки нет.
  4. Стиль таблиц я бы создавал свой - это гарантирует, что все будет работать по крайней мере предсказуемо (кстати, я код просмотрел по диагонали, поэтому, может, и не увидел - а где оно применяется? В какой функции?
    Добавлено: все, увидел.)
    Добавлено 2: Я из принципа изменю стиль таблиц Standard так, что там не будет ни заголовка таблицы, ни заголовков столбцов. И какой вид получится в результате? Или текстовый стиль там сделаю ненормально большим или маленьким.
    Сюда же: не понял, где выполняется назначение ширины столбцов и высоты строк.
  5. Для функции menu (кстати, имя я бы поменял) код слишком мал - а где сокращения для initget? А почему бы не получать не только getkword, но и, например, getpoint?
  6. Можно обойтись без _.extrude, _.subtract, _.cylinder, _.polygon и прочих мелких шалостей. Это также касается _.ucs.
  7. Объем не надо вбивать в атрибуты - он и так будет высчитываться для тела. Надо только суметь его получить
  8. В строке
    Код:
    [Выделить все]
    (setq obj (strcat "Итого " (rtos count) " " (cadr (getblockattrib block)) " общей массой " (rtos countmass) "кг."))
    ):end of if
    допущена ошибка: стоит двоеточие вместо символа комментария. lsp править не буду принципиально.
P.S. Я мог массу вещей просто не углядеть.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 27.06.2008 в 08:20. Причина: Убрал тафтологию.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.06.2008, 01:29
#6
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,970
Отправить сообщение для Red Nova с помощью Skype™


Хорошо бы readme и пример работы. А то для меня все туманно.
__________________
Блог
Red Nova вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.06.2008, 08:09
#7
Кулик Алексей aka kpblc
Moderator

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


Если честно, я даже не запускал. После примерного анализа понял, что надо сравнивать с "Прокат 3D" В.Кондрата. А я там ни бум-бум.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 27.06.2008, 08:31
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,838


Ну если в кратце то так - нужна для построениея и подсчета металлоконструкций, после запуска 4 подменю - создание, построение, подсчет выход. Создание - создает блок с указанным элементом, построение - запрашивает точку(и) всатвки блока, подсчет - строит таблицы по количеству и массе (+ длинне в случае прокатных блоков). Элеметны условно деляться на два типа "целиковые" и "прокатные" целиковые - просто блоки с атрибутами массы, прокатные - неравнорастянутые блоки. Вкратце все.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.06.2008, 09:13
#9
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,888


Димо, вот оно и видно, што любитель... Не обижайся. Мало придумать - надо еще себя продать. Или заинтересовать народ своей особой. Тебе все с прогой ясно, а нам что делать? Берем- растягиваем неравномерно- вставляем... Нормальная реакция со стороны нормального юзера - сам себе вставь. 10 чел скачали. Всего. Напиши толком, что, для чего, в чем помогает. Крысу спасибо скажи, что тратит на тебя. Не забудь хорошую советскую изобретательскую формулу: " отличающийся от известных тем, что..."
Аshаs-ка вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.06.2008, 10:37
#10
Ravl

конструктор
 
Регистрация: 03.06.2008
Київ
Сообщений: 267


пробовал запустить рисует елементы длиной 1мм
Ravl вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 27.06.2008, 11:03
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,838


Вот более развернутая инструкция, а пользователь нынче придирчив
Вложения
Тип файла: pdf инструкция к конструктору.pdf (150.2 Кб, 1050 просмотров)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 27.06.2008, 11:16
#12
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,838


Ну и для наглядности
Вложения
Тип файла: rar деморолик.rar (289.6 Кб, 743 просмотров)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.06.2008, 11:21
#13
Кулик Алексей aka kpblc
Moderator

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


Пользователь всегда придирчив
Теперь по работе с программой (напоминаю - я ее не запускал).
  1. Обычный пользователь (на которого, как я понимаю, и рассчитана программа) не станет постоянно набирать konstruktor. Хотя бы потому, что слово длинное. И пишется, по-моему (для английского варианта) по-другому.
  2. Крайне желательно делать окно с настройками - лично меня без спросу выскакивающие alert'ы очень быстро доведут до белого каления. В окне настроек, например, дать возможность выбора "показывать диалоговые окна / не показывать ни одного диалога / показывать избранные". Сюда же - я б подумал об использовании не просто alert, а собственных диалоговых окон, в которых есть спец.галка "Больше не показывать". Где хранить данные - думай сам.
  3. Почему нельзя вводить пробелы в названии атрибута имени профиля?*
  4. Еще раз повторяю - объем не надо засовывать в атрибуты. Лишнее!
  5. Поскольку (хотя и 3Д), но изделия стандартные, то почему все это дело не загонять в любую базу данных? И брать оттуда? Правда, потребует это массы усилий именно по разработке кода.
---
* Поправка: в значении атрибута с именем профиля.
---
Добавлено: пп.1-3 написаны с точки зрения пользователя, пп 4 и 5 - с точки зрения программиста.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 27.06.2008, 11:27
#14
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,838


То Крыс - делал изначально под себя, потом решил "выкласть", твои замечания оценил, если будут заинтересованные (а тем более еще пожелания), то напишу v2.0, мне и в таком виде удобно - а ежили никому не нужно, то и бог с ней. За советы еще раз спасибо.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 27.06.2008, 11:34
#15
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 10,518


Да, уж... Но, коль "Критика приветствуеться", то:

Работа проделана большая, сложная но бесполезная. На очевидных ошибках программирования и останавливаться не стоит - это "невидимые миру слезы". А вот что видит пользователь?

1. Сначала меню, которое зачем-то обязательно выплывает динамически. "Сразу рука тянется к парабеллуму". Кому так нравится - сам настроит.

2. В меню - Создать, Построение, подсчет, Выход. А я ESC жму, и все ломается. А динамический ввод остался.

3. Но я хочу что-то "нарисовать", трубу или уголок. И где они? Оказывается надо непременно пройти несколько стадий.

4. Ладно, выбираю Построение. Вберу, допустим прокат. А мне говорят - не созданы прокатные блоки. Приехали. Ну, не созданы, так создайте. Но юзер должен соображать, как в создание добраться.

5. Допустим, создать выберем. Выберу уголок, а там надо еще несколько этапов пройти, потом (может быть) скажут - Уголок создан.

6. Далее опять надо соображать -Построение, наверное из предыдущего меню. А я в него перейти не могу, потому что на экране внизу висит дебильное динамическое меню (в самом низу, видно не полностью) и нельзя найти в нем пункт. Рука тянется уже не к парабеллуму, а к ремню с пряжкой. Да, при щелчке мышкой по экрану меню прыгает. Но это ж надо сообразить. Для простоты жму ESC.

7. Делаю еще одну попытку. Выбираю Построение, через шажки вижу - вроде появился профиль. А я уж не помню, он мне нужен или другой. Что, для каждого заново экспедицию оснащать?

8. Ладно, попробуем хоть один построить. Там какая-то таинственная "регулировка". Спрашивает угол профиля. Что за угол, относительно чего, если это угол поворота? И как я его должен знать, если мне надо построить уголок в пространстве от точки до точки?

9. Ладно, угол от балды написал, а меня опять в меню. Да когда это кончится?? Но попробую выбрать уголок. Спрашивает начальную и конечную точки (если прерву, то что будет?).

10. Уголок нарисовался, но совсем не так, как мне надо. Оказывается, от угла он сделан. Но уголок изделие не симметричное. Полки разных размеров, повернуты могут быть всяко, и точка вершины угла может быть неизвестна - может по оси надо делать?

Ну, и так далее. Плохо. Нестандартно по действиям и неправильно.

Должно быть просто:
а) Сразу запрос точки с опциональным выбором номенклатуры. При последующих запросах - предложение предыбущего варианта. И возможность штатного выхода. Для несимметричных профилей - разные варианты расположения точки относительно профиля.
б) Потом запрос второй точки.
в) Для "не труб" - запрос поворота - чтобы и визуально можно было повернуть и вводом угла.

А все эти подсчеты - дело десятое. И, если уж их делать, то в стандартную форму ведомостей и спецификаций.
ShaggyDoc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 29.06.2008, 23:36
#16
dextron3

Фотограф
 
Регистрация: 01.01.2007
Алматы
Сообщений: 5,005


Выложи видеоролик как спеки то считает? оч интересная программа!
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 01.07.2008, 01:24
#17
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,838


Цитата:
Сообщение от dextron3 Посмотреть сообщение
Выложи видеоролик как спеки то считает? оч интересная программа!
??? - запускать-то пробывал ?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 10.07.2008, 10:03
#18
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,553
Отправить сообщение для wetr с помощью ICQ Отправить сообщение для wetr с помощью Skype™


to ShaggyDoc, на ошибках учатся... Не надо так строго - не у всех такой опыт как у вас.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > 3D Konstruktor для проектировщиков КМ.

РЕВЕРС. Автоматическая пакетная печать множества рамок (форматов) из пространства модели и листов
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструирование в 3D Serz AutoCAD 87 28.10.2014 10:40
Изменнеие в КМ по просьбе КМД Aleksey_Br Прочее. Архитектура и строительство 20 09.09.2010 11:29
Как тело построенное 3D Face превратить в 3D Solid? Bdod AutoCAD 37 03.08.2006 11:36
3D surfaces (not meshes) в - 3D SOLID ?????? Startrek AutoCAD 2 30.06.2004 14:47

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||