Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
LISP. Вставка в таблицу поля, соотвествующего площади примитива (Страница 3 из 3)
Форумы CADUser → Готовые программы → LISP. Вставка в таблицу поля, соотвествующего площади примитива
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения с 51 по 68 из 68
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
А нет чего либо подобного но без привязки к (FIELD), просто текст?
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Valery Brelovsky, Если и нет, то никогда не поздно создать. По примеру PTLB
(defun C:PTLB1 ( / en cmdname fld txt fc tblset tblobj row col pt whatAcadVer tstyle what) ; Команда: PTLB1 ; Эта команда позволяет вставить в указанную точку рисунка или указанную ячейку таблицы ; текст, содержащий значение площади или длины построенного или выбранного контура. ; Точность округления и масштабный коэффициент настраиваются через опцию Установки ; Код можно сохранить в файле ptlb1.lsp ; Возможный макрос для кнопки или пункта меню: ; ^C^C(if (not C:PTLB1) (load "ptlb1"));PTLB1; ;; Вариант макроса для задания м2 ;; ^C^C(if (not C:PTLB1) (load "ptlb1"));PTLB1;_L;_S;1;0.001;2;5;;м2; ;;Где ;; _L - считать длинну (_A - площадь) ;; _S - установки ;; 1 - линейный масштабный коэффициент ;; 0.001 — площадной масштабный коэффициент ;; 2 — точность округления ;; 5 — высота текста ;; префикса нет ;; м2 - суффикс ;;;Ф-ция возвращает версию Автокада ввиде 2004 2005 2006 2007 2008 (defun whatAcadVer ( / Aver) ;;;Ф-ция возвращает версию Автокада ввиде 2004 2005 2006 2007 2008 2009 (setq Aver (atof (substr (getvar "ACADVER") 1 4))) (cond ((= Aver 18.0) 2010) ((= Aver 17.2) 2009) ((= Aver 17.1) 2008) ((= Aver 17.0) 2007) ((= Aver 16.2) 2006) ((= Aver 16.1) 2005) ((= Aver 16.0) 2004) ((= Aver 15.06) 2002) (t 0) ) ) (vl-load-com) (or *SCALEL* (setq *SCALEL* 1)) (or *SCALEA* (setq *SCALEA* 1)) (or *PREC* (setq *PREC* 2)) (or *TEXTSIZE* (setq *TEXTSIZE* (getvar "TEXTSIZE"))) (or *SUFF* (setq *SUFF* ""))(or *PREF* (setq *PREF* "")) (setq *SUFF* (vl-princ-to-string *SUFF*)) (setq *PREF* (vl-princ-to-string *PREF*)) (and (or ;_ > Проверяем версию (> (whatAcadVer) 2005) (alert "\nНужен Автокад версии 2006 и выше") ) ;_ < Проверяем версию (or (initget "Length Area Длина Площадь _Length Area Length Area") t) (if (null (setq what (getkword "\nЧто будем считать [Длина/Площадь] <Длина> :"))) (setq what "Length") t) (princ "\nТекущий масштаб: линейный = ")(princ *SCALEL*)(princ " площадной = ")(princ *SCALEA*) (princ " Текущая точность округления = ")(princ *PREC*) (princ " Высота текста = ")(princ *TEXTSIZE*) (princ " Префикс= ")(princ *PREF*)(princ " Суффикс= ")(princ *SUFF*) (or (initget "Polyline Setting sElect Полилиния Установки Выбор _Polyline Setting sElect Polyline Setting sElect") t ) (or ;_ > Запрашиваем что рисовать + опции (while (= (setq cmdname (getkword (strcat (if (= what "Area") "\n<Площадь> " "\n<Длина> ") "Выберите или нарисуйте [Полилиния/Установки/Выбор] <Выбор>: "))) "Setting") (princ "\nНовый линейный масштабный коэффициент <")(princ *SCALEL*)(princ "> : ") (initget 6) (if (setq en (getdist))(setq *SCALEL* en)) (princ "\nНовый площадной масштабный коэффициент <")(princ *SCALEA*)(princ "> : ") (initget 6) (if (setq en (getdist))(setq *SCALEA* en)) (princ "\nТочность округления <")(princ *PREC*)(princ "> : ") (initget 4) (if (setq en (getint))(setq *PREC* en)) (princ "\nВысота текста <")(princ *TEXTSIZE*)(princ "> : ") (initget 6) (if (setq en (getdist))(setq *TEXTSIZE* en)) (princ "\nПрефикс (пробел - очистить) <")(princ *PREF*)(princ "> : ") (setq en (getstring t))(if (= en "")(setq en *PREF*)) (if (= en " ")(setq en "")) (if (= (substr (vl-string-left-trim "\/" en) 1 2) "U+") (setq en (strcat "\\" (vl-string-left-trim "\/" en))))(setq *PREF* en) (princ "\nСуффикс (пробел - очистить) <")(princ *SUFF*)(princ "> : ") (setq en (getstring t))(if (= en "")(setq en *SUFF*)) (if (= en " ")(setq en "")) (if (= (substr (vl-string-left-trim "\/" en) 1 2) "U+") (setq en (strcat "\\" (vl-string-left-trim "\/" en))))(setq *SUFF* en) (initget "Polyline Setting sElect Полилиния Установки Выбор _Polyline Setting sElect Polyline Setting sElect") ) t ) ;_ < Запрашиваем что рисовать + опции (cond ((= cmdname "Polyline")(setvar "CMDECHO" 1)(command "_.PLINE") (while (> (getvar "CMDACTIVE") 0)(command pause)) (setq en (entlast)) ) ((or (null cmdname)(= cmdname "sElect")) (princ "\nВыберите полилинию, круг, сплайн, эллипс или дугу") (and (setq tblset (ssget "_:S:E" (if (= what "Area") '((0 . "*POLYLINE,ARC,SPLINE,ELLIPSE,CIRCLE")) '((0 . "LINE,*POLYLINE,ARC,CIRCLE"))) )) (setq en (ssname tblset 0)) ) ) (t nil) ) ;_ Формируем поле (cond ((= what "Area") (setq fld (vlax-curve-getArea (vlax-ename->vla-object en))) (setq fld (* fld *SCALEA*)) (setq fld (rtos fld 2 *PREC*)) (setq fld (strcat *PREF* fld *SUFF*)) ;;; (setq fld (strcat "%<\\AcObjProp Object(%<\\_ObjId " ;;; (vl-princ-to-string(vla-get-objectid )) ;;; ">%).Area \\f \"%lu2%ps["*PREF* "," *SUFF* ;;; "]%pr"(itoa *PREC*) "%ct8["(vl-princ-to-string *SCALEA*)"]\">%" ;;; ) ;_ strcat ;;; ) ;_ setq ) ((= what "Length") (setq fld (vlax-curve-getDistAtParam (vlax-ename->vla-object en) (vlax-curve-getEndParam (vlax-ename->vla-object en)) ) ) (setq fld (* fld *SCALEL*)) (setq fld (rtos fld 2 *PREC*)) (setq fld (strcat *PREF* fld *SUFF*)) ) (t (setq fld "Неизвестное свойство")) ) (setvar "cmdecho" 0) (setq tstyle (getvar "TEXTSTYLE")) ;_Стиль текста Стиль должен существовать ;_ Создаем текст (if (= (cdr (assoc 40 (tblsearch "STYLE" tstyle))) 0.0) ;; нулевая высота текста (vl-cmdf "_.-TEXT" "_S" tstyle "_none" '(0 0 0) *TEXTSIZE* 0 fld) (vl-cmdf "_.-TEXT" "_S" tstyle "_none" '(0 0 0) 0 fld) ) ;_ end of if (setq txt (entlast)) ;_ Копируем в буфер и обратно (princ "\n Укажите точку вставки текста или ячейку таблицы:") (vl-cmdf "_.copybase" (trans '(0 0 0) 0 1) txt "" "_.erase" txt "" "_.pasteclip" "_none" pause) ;_ В txt примитив текста в pt точка вставки (setq txt (entlast) pt (getvar "LASTPOINT")) (or (and ;_Проверяем, попала ли точка в ячейку таблицы (setq tblobj nil tblset (ssget "_X" '((0 . "ACAD_TABLE")))) (setq lst (mapcar 'vlax-ename->vla-object(vl-remove-if 'listp (mapcar 'cadr (ssnamex tblset))))) (mapcar '(lambda (x) (or tblobj (and (= :vlax-true (vla-HitTest x (vlax-3d-point (trans pt 1 0)) (vlax-3d-point (trans (getvar "VIEWDIR") 1 0)) 'row 'col)) (setq tblobj x) ) ) ) lst) tblobj row col (or (vla-SetText tblobj row col fld) t) (entdel txt) ) (and ;_Не попала, рисуем текст с полем (setq txt (vlax-ename->vla-object txt)) (vlax-write-enabled-p txt) (vlax-method-applicable-p txt 'FieldCode) ;_есть метод FieldCode (vlax-property-available-p txt 'TextString) (vlax-put txt 'TextString fld) ) ) ) (princ) )
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Владимир Азарко,
Что то я закрутился. И пропустил столько времени. Придется нагонять.
ПОпробовал в 2000. Что то не пошла.
Command: ; error: syntax error
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Владимир Азарко,
Что то я закрутился. И пропустил столько времени. Придется нагонять.
ПОпробовал в 2000. Что то не пошла.
Command: ; error: syntax error
посмотрите код:
(setq Aver (atof (substr (getvar "ACADVER") 1 4)))
(cond
((= Aver 18.0) 2010)
((= Aver 17.2) 2009)
((= Aver 17.1) 2008)
((= Aver 17.0) 2007)
((= Aver 16.2) 2006)
((= Aver 16.1) 2005)
((= Aver 16.0) 2004)
((= Aver 15.06) 2002)
2000-й не поддерживает
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Не то чтобы не поддерживает. Я не знаю, что в 2000 возвращает (getvar "ACADVER"). Я в свое время как то 2000-й пропустил. Перешел с 14 сразу на 2002.
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Если не изменяет память, то 15.0, хотя сравнивать (да еще на "=") плавающие числа... Да и в AutoCAD 2000 полей еще не было...
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
А возможно ли чтобы лисп записывал высоту 3д тела в таблицу, и значение таблицы также менялось с изменением высоты 3д тела?
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
А возможно ли чтобы лисп записывал высоту 3д тела в таблицу
Нет. Нет такого свойства.
#60 12 ноября 2009г. 15:59:39 (изменено: klopius, 12 ноября 2009г. 16:28:41)
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
ну как же какже ...
3д тело ресуем так:
1. начертили допустим квадратик
2. выдавили его екструдом
3. жамкаем ктрл+1
4. смотрим внимательно в закладке геометрия, значения высоты.
(пользуюсь автосадом 2009)
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Вот все свойства, которые могут быть использованы в поле для объекта 3DSOLID:
Найди среди них высоту (height). Вопросы еще есть? Если вопрос "почему в панели свойств есть такое свойство, а для FIELD нет" - то адресуй его в Autodesk.
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Мы на одном языке говорим? Смотреть ты можешь где угодно. Хоть в панели свойств. Но в ячейку таблицы поле, которое бы содержало высоту ящика, и которое бы обновлялось, ты вставить не сможешь.
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
- Мы на одном языке говорим? -да
- Смотреть ты можешь где угодно. Хоть в панели свойств. Но в ячейку таблицы поле, которое бы содержало высоту ящика, и которое бы обновлялось, ты вставить не сможешь. - ну чтож, будем искать обходной путь
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Владимир Азарко [/B]]
(defun C:PTLB1 ( / en cmdname fld txt fc tblset tblobj row col pt whatAcadVer tstyle what) ; Команда: PTLB1 ; Эта команда позволяет вставить в указанную точку рисунка или указанную ячейку таблицы ; текст, содержащий значение площади или длины построенного или выбранного контура. ; Точность округления и масштабный коэффициент настраиваются через опцию Установки ; Код можно сохранить в файле ptlb1.lsp ; Возможный макрос для кнопки или пункта меню: ; ^C^C(if (not C:PTLB1) (load "ptlb1"));PTLB1; ;; Вариант макроса для задания м2 ;; ^C^C(if (not C:PTLB1) (load "ptlb1"));PTLB1;_L;_S;1;0.001;2;5;;м2; ;;Где ;; _L - считать длинну (_A - площадь) ;; _S - установки ;; 1 - линейный масштабный коэффициент ;; 0.001 — площадной масштабный коэффициент ;; 2 — точность округления ;; 5 — высота текста ;; префикса нет ;; м2 - суффикс ........
А нет ли подобного PTLB1 только чтоб текст, содержащий значение площади вставлялся в существующий текст ?
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
А возможно ли запихнуть формулу в поле, таким образом, чтобы считалась сумма значений (числовых) текстовых объектов? Может быть, не в таблицу, а в отдельном поле?
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Всё можно сделать! Надо только делать :!:
Эта тема получила плодотворное продолжение в соседнем форуме My Webpage
Re: LISP. Вставка в таблицу поля, соотвествующего площади примитива
Добрый день!
Идея и вопрос.
В AutoCAD есть функция ВИДЫ МОДЕЛЕЙ.
Можно ли как то связать например Lisp AreaTT и созданные ВИДЫ МОДЕЛЕЙ.
Задача - Чтобы после Lisp AreaTT переходило на следующий по возрастанию ВИД МОДЕЛИ.
Сообщения с 51 по 68 из 68
Тему читают: 1 гость
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум работает на PunBB, при поддержке Informer Technologies, Inc