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

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

Как на LISPе автоматически выбрать линию и точку?

Ответ
Поиск в этой теме
Непрочитано 27.10.2003, 13:13 #1
Как на LISPе автоматически выбрать линию и точку?
Mikhail
 
инженер-технолог (ГИП)
 
Санкт-Петербург
Регистрация: 11.09.2003
Сообщений: 1,134

Добрый день.
Есть такая команда в меню

^C^C^Cl;\\;-INSERT;C:/1.DWG;SCALE;(GETVAR "DIMSCALE");\\x;l;extrude;l;;p;


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

Спасибо.

p.s. будет почти PLan4D )

[/i]
Просмотров: 3589
 
Непрочитано 27.10.2003, 17:47
#2
DronT


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


не ищи сложностей там где не надо
юзай cylinder

например так:

(defun c:lt()
(princ "\nЛинию выбираем")
(setq OS (entget(ssname(ssget)0)))
(setq LON (distance (cdr(assoc 10 OS))(cdr(assoc 11 OS))))
(command "UCS" "ZA"(cdr(assoc 10 OS))(cdr(assoc 11 OS)))
(princ "\nНаружный диаметр")
(setq NR (/(getreal)(* 2 (getvar "dimlfac"))))
(command "CYLINDER" "0,0,0" NR LON)
(command "UCS" "PR")
(princ)
)


если ты не сторонник простых решений то можно и так:
диалог truba.dcl:

truba:dialog { label = "Труба бесшовная" ;
:boxed_row {
:text { key = "MARK" ;
fixed_width=true;
fixed_height=true;
height = 3 ;
width=28 ;
}
}//boxed_row
:row {
:column {
:list_box { label = "Dу";
key = DIAM ;
height=9 ;
width=10 ;
fixed_width=true;
fixed_height=true;
} //list DN
}//column
:column {
:image { key = IMAG ;
height=5 ;
width=12 ;
fixed_width=true;
fixed_height=true;
}//image
:list_box { label = "Толщина";
key = TOLC ;
height=6 ;
width=12 ;
fixed_width=true;
} //list tolc
}//column
}//row
:row {
:list_box { label = "Материал" ;
key = MATER ;
height=4 ;
width=30 ;
fixed_width=true;
}
}//row
:row {
:list_box { label = "Рисовать слоем" ;
key = LAYR ;
height=4 ;
width=30 ;
fixed_width=true;
}
}//row
:row {
ok_button;
}//row
} //dialog

и лисп

(defun c:truba()
(truba)
)
;-------------------------------------------------------------------
(defun truba()
(setq NDIA (load_dialog "truba.dcl")
)
(new_dialog "truba" NDIA)
(start_list "DIAM")
(add_list " 50")
(add_list " 80")
(add_list "100")
(add_list "150")
(add_list "200")
(add_list "250")
(add_list "300")
(add_list "350")
(add_list "400")
(end_list)
(start_list "MATER")
(add_list "ст.20")
(add_list "ст.20 ПАР")
(add_list "12Х18Н10Т")
(end_list)
(start_list "LAYR")
(add_list "Текущим")
(add_list "Новое")
(add_list "Сущ.")
(end_list)
(start_image "IMAG")
(fill_image 0 0 100 100 9)
(slide_image -10 -10 90 70 "truba")
(end_image)
(set_tile "MARK" "Труба бесшовная\nгорячекатанная ВСН 186-74")
(if (= DIAMET nil)(setq DIAMET 0)
)
(set_tile "DIAM" (itoa DIAMET))
(DIATRU)
(if (= MATRL nil)(setq MATRL 0)
)
(set_tile "MATER" (itoa MATRL))
(set_tile "LAYR" "0")
(setq RLAYER 0)

(action_tile "DIAM" "(progn(setq DIAMET (atoi $value))(DIATRU)
)"
)
(action_tile "TOLC" "(setq TOLCHA (atoi $value))"
)
(action_tile "MATER" "(setq MATRL (atoi $value))"
)
(action_tile "LAYR" "(setq RLAYER (atoi $value))"
)

(start_dialog)
(unload_dialog NDIA)

(cond
((= DIAMET 0)(setq DIARAL 57.0))
((= DIAMET 1)(setq DIARAL 89.0))
((= DIAMET 2)(setq DIARAL 108.0))
((= DIAMET 3)(setq DIARAL 159.0))
((= DIAMET 4)(setq DIARAL 219.0))
((= DIAMET 5)(setq DIARAL 273.0))
((= DIAMET 6)(setq DIARAL 325.0))
((= DIAMET 7)(setq DIARAL 377.0))
((= DIAMET 8)(setq DIARAL 426.0))
);cond
(setq DIARAL (/ DIARAL(* 2 (getvar "dimlfac"))))
(princ "\nОсь трубы")
(setq OSTRUB (ssname(ssget)0))
(setq OS (entget OSTRUB))
(setq LON (distance (cdr(assoc 10 OS))(cdr(assoc 11 OS))))
(command "UCS" "ZA"(cdr(assoc 10 OS))(cdr(assoc 11 OS)))
(command "CYLINDER" "0,0,0" DIARAL LON)
(command "UCS" "PR")

(regapp "TRUBA")
(cond
((and(= MATRL 0)(= TOLCHA 0))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "00"))))))
((and(= MATRL 1)(= TOLCHA 0))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "10"))))))
((and(= MATRL 2)(= TOLCHA 0))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "20"))))))
((and(= MATRL 0)(= TOLCHA 1))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "01"))))))
((and(= MATRL 1)(= TOLCHA 1))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "11"))))))
((and(= MATRL 2)(= TOLCHA 1))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "21"))))))
((and(= MATRL 0)(= TOLCHA 2))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "02"))))))
((and(= MATRL 1)(= TOLCHA 2))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "12"))))))
((and(= MATRL 2)(= TOLCHA 2))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "22"))))))
((and(= MATRL 0)(= TOLCHA 3))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "03"))))))
((and(= MATRL 1)(= TOLCHA 3))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "13"))))))
((and(= MATRL 2)(= TOLCHA 3))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "23"))))))
((and(= MATRL 0)(= TOLCHA 4))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "04"))))))
((and(= MATRL 1)(= TOLCHA 4))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "14"))))))
((and(= MATRL 2)(= TOLCHA 4))(setq TIPRAZ '((-3 ("TRUBA"(1000 . "24"))))))
);cond
(setq OS2 (append OS TIPRAZ))
(entmod OS2)
(princ)
);truba
;-------------------------------------------------------------------
(defun diatru()
(if (= DIAMET 0) (progn
(start_list "TOLC" 1 0) ;для Dу 50
(add_list " 57x3.5")
(add_list " 57x5.0")
(add_list " ")
(add_list " ")
(add_list " ")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
(if (= DIAMET 1) (progn
(start_list "TOLC" 1 0) ;для Dу 80
(add_list " 89x3.5")
(add_list " 89x4.0")
(add_list " 89x5.0")
(add_list " 89x6.0")
(add_list " 89x8.0")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
(if (= DIAMET 2) (progn
(start_list "TOLC" 1 0) ;для Dу100
(add_list "108x4.0")
(add_list "108x5.0")
(add_list "108x6.0")
(add_list "108x8.0")
(add_list " ")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
(if (= DIAMET 3) (progn
(start_list "TOLC" 1 0) ;для Dу150
(add_list "159x4.5")
(add_list "159x6.0")
(add_list "159x8.0")
(add_list "159x10.0")
(add_list "159x12.0")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
(if (= DIAMET 4) (progn
(start_list "TOLC" 1 0) ;для Dу200
(add_list "219x6.0")
(add_list "219x8.0")
(add_list "219x10.0")
(add_list "219x12.0")
(add_list "219x16.0")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
(if (= DIAMET 5) (progn
(start_list "TOLC" 1 0) ;для Dу250
(add_list "273x7.0")
(add_list "273x8.0")
(add_list "273x10.0")
(add_list "273x12.0")
(add_list "273x16.0")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
(if (= DIAMET 6) (progn
(start_list "TOLC" 1 0) ;для Dу300
(add_list "325x8.0")
(add_list "325x10.0")
(add_list "325x12.0")
(add_list "325x16.0")
(add_list "325x20.0")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
(if (= DIAMET 7) (progn
(start_list "TOLC" 1 0) ;для Dу350
(add_list "377x9.0")
(add_list "377x12.0")
(add_list "377x16.0")
(add_list "377x20.0")
(add_list " ")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
(if (= DIAMET 8) (progn
(start_list "TOLC" 1 0) ;для Dу400
(add_list "426x10.0")
(add_list "426x12.0")
(add_list "426x16.0")
(add_list " ")
(add_list " ")
(end_list)
(set_tile "TOLC" "0")
(setq TOLCHA 0)
);progn
);if
);diatol

тока лисп НЕДОДЕЛАНЫЙ, там на нержавейку надо переписывать функцию. Хотя для визуализации это по барабану...

ЗЫ. слайдик нарисуй если что...
 
 
Автор темы   Непрочитано 28.10.2003, 10:04
#3
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,134


DronT
Спасибо большое. Всё оказывается просто, ну или почти всё Второй развернутый ЛИСП я так и не смог заставить работать понормальному, наверное что то не то делал. Он наверное .dcl не подгружал, просто рисует цилиндр диаметром 57. Но тут наверное мое неумени сказывается.
Еще раз спасибо. Вот будет отпуск возьму на море книгу AutoLISP
Удачи.
Mikhail вне форума  
 
Непрочитано 28.10.2003, 10:19
#4
DronT


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


truba.dcl должен сидеть вместе в лиспом в одной папке
Support например
ЗЫ. всё для версии акада 2000
или может он из- за слайда? ему там надо ещё truba.sld кажеться- слайд короче.
ЗЗЫ. Я все ещё ищу единомышленников для совместного блокорисования. А то сам всё сделаю и никому не дам...
 
 
Автор темы   Непрочитано 28.10.2003, 10:33
#5
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,134


Да проблемма наверное в КАДе 2004.
А вот по поводу блокорисования я бы с удовольствием скооперировался, т.к. польза от последующего использования громадная, но времени боюсь выкроить не смогу.
Удачи.
Mikhail вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как на LISPе автоматически выбрать линию и точку?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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