Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 04:31 14.07.25 
Клубове/ Компютри и Интернет / CAD/CAM Пълен преглед*
Информация за клуба
Тема Re: .... Field в AutoCAD + AutoLISP [re: Mинaвaщ]
АвторMинaвaщ (Нерегистриран) 
Публикувано10.09.07 00:50  



Още от появяването на FIELD останах с впечатление , че е нужно сам Потребителя да си доАвтоматизира процеса ...
Това са намерени примерни Лиспове:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:AO ()
(vl-load-com)
;;get a reference to model space
(setq *model-space*
(vla-get-ModelSpace
(vla-get-ActiveDocument (vlax-get-acad-object))
)
)
;;pass this function an entity and a point
(defun LinkedArea (ent pt / obj objID ip width str)
;;convert the entity to an object
(setq obj (vlax-ename->vla-object ent)
;;get the object ID
objID (vla-get-objectid obj)
;;convert the point
ip (vlax-3D-Point pt)
;;set the width for the MTEXT
width 0.0
;;set the string - this creates the field
str (strcat
"%<\\AcObjProp.16.2 Object(%<\\_ObjId "(rtos objID 2 0)">%).Area \\f \"%lu2%ps - Area\">%"
)
)
;;Create the MTEXT entity containing the field.
(vla-addMText *model-space* ip width str)
)

;; Set A = the entity and set B = Point for text
(setq a (car (entsel)) b (getpoint "\n Select Point: "))
;;Call the function
(linkedarea a b)
(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------------------------------
; Команда: AREATLB1
; Эта команда позволяет вставить в заданную
; ячейку таблицы поле (FIELD), соответствуещее
; площади выбранного примитива. Так как это поле
; связано с конкретным примитивом, то при изменении
; примитива поле пересчитывается (необходима
; регенерация)
;------------------------------------------------
;P.S.:
;1) Если необходимо, чтобы площадь вычислялась с заданными установками UNITS необходимо:
;строку ">%).Area>%" заменить на строку ">%).Area \\f \"%lu6%qf1\">%"
;2) Если площадь вычисляется в мм^2, а нужно в м^2, то эта строка соответственно заменяется на
;">%).Area \\f \"%lu6%qf1%ct8[1e-006]\">%"
;3) И т.д.

(defun C:AREATLB1 ( / en obj s row col)
(vl-load-com)
(cond
((and (setq en (car (entsel "\nВыберите таблицу: ")))
(= (cdr (assoc 0 (entget en))) "ACAD_TABLE"))
(setq obj (vlax-ename->vla-object en))
(while (setq en (car (entsel "\nВыберите примитив для вставки его площади в таблицу (ENTER — завершение): " )))
(cond
((vlax-property-available-p (vlax-ename->vla-object en) 'Area)
(setq s (strcat
"%<\\AcObjProp Object(%<\\_ObjId "
(vl-princ-to-string (vla-get-objectid (vlax-ename->vla-object en)))
">%).Area>%"
))
(if (setq p (getpoint "\nУкажите ячейку таблицы: " ))(progn
(if (= :vlax-true (vla-HitTest obj
(vlax-3d-point (trans p 1 0)) (vlax-3d-point (trans (getvar "VIEWDIR") 1 0)) 'row 'col))
(vla-SetText obj row col s)
)
)) ;_endof if progn
)
(t
(princ "\nДля этого примитива невозможно получить свойство Area!")
)
)
)
)
(t
(princ "\nЭто не таблица!")
)
)
(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------------------------------
; Команда: AREATLB
; Эта команда позволяет вставить в заданную
; ячейку таблицы поле (FIELD), соответствуещее
; площади выбранного примитива. Так как это поле
; связано с конкретным примитивом, то при изменении
; примитива поле пересчитывается (необходима
; регенерация)
;------------------------------------------------
;P.S.:
;1) Если необходимо, чтобы площадь вычислялась с заданными установками UNITS необходимо:
;строку ">%).Area>%" заменить на строку ">%).Area \\f \"%lu6%qf1\">%"
;2) Если площадь вычисляется в мм^2, а нужно в м^2, то эта строка соответственно заменяется на
;">%).Area \\f \"%lu6%qf1%ct8[1e-006]\">%"
;3) И т.д.

(defun C:AREATLB ( / en obj s row col)
(vl-load-com)
(cond
((and (setq en (car (entsel "\nВыберите таблицу: ")))
(= (cdr (assoc 0 (entget en))) "ACAD_TABLE"))
(setq obj (vlax-ename->vla-object en))
(while (setq en (car (entsel "\nВыберите примитив для вставки его площади в таблицу (ENTER — завершение): " )))
(cond
((vlax-property-available-p (vlax-ename->vla-object en) 'Area)
(setq s (strcat
"%<\\AcObjProp Object(%<\\_ObjId "
(vl-princ-to-string (vla-get-objectid (vlax-ename->vla-object en)))
">%).Area>%"
))
(if (setq p (getpoint "\nУкажите ячейку таблицы: " ))(progn
(if (= :vlax-true (vla-HitTest obj
(vlax-3d-point (trans p 1 0)) (vlax-3d-point (trans (getvar "VIEWDIR") 1 0)) 'row 'col))
(vla-SetText obj row col s)
)
)) ;_endof if progn
)
(t
(princ "\nДля этого примитива невозможно получить свойство Area!")
)
)
)
)
(t
(princ "\nЭто не таблица!")
)
)
(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------------------------------------------
; Команда: PLAREATAB
; Эта команда позволяет вставить в заданную
; ячейку таблицы поле (FIELD), содержащее значение
; площади построенного контура. Так как это поле
; связано с конкретным объектом, то при изменении
; объекта поле пересчитывается (необходимо обновление
; поля)
; Код можно сохранить в файле plareatab.lsp
; Возможный макрос для кнопки или пункта меню:
; ^C^C(if (not C:PLAREATAB) (load "plareatab")) PLAREATAB
;------------------------------------------------------------
;Здесь площадь из квадратных миллиметров преобразуется в квадратные метры.
;Точность вычисления площади определяется заданием количества знаков после
;точки в диалоговом окне "Единицы" ("Units").
;А дальше можно для ячейки последней строки таблицы задать формулу "Сумма"
;и связать это поле с ячейками, в которые будет вставляться площадь.
;В результате в этой ячейке будет автоматически подсчитываться сумма площадей контуров.
;Только в формулу надо будет добавить множитель *0.000001 (для квадратных метров).
;Ясно, что все это будет работать только в AutoCAD 2006 и в последующих версиях.

(defun C:PLAREATAB ( / echo en obj s row col)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(vl-load-com)
(vl-cmdf "_.UNDO" "_be")
(cond
((and (setq en (car (entsel "\n Выберите таблицу: ")))
(= (cdr (assoc 0 (entget en))) "ACAD_TABLE"))
(setq obj (vlax-ename->vla-object en))
(setvar "CMDECHO" 1)
(princ "\n Нарисуем контур: ")
(command "_PLINE")
(while (/= (logand (getvar "cmdactive") 31) 0)
(command pause)
)
(setvar "CMDECHO" 0)
(setq en (entlast))
(cond
((vlax-property-available-p (vlax-ename->vla-object en) 'Area)
(setq s (strcat
"%<\\AcObjProp Object(%<\\_ObjId "
(vl-princ-to-string (vla-get-objectid (vlax-ename->vla-object en)))
">%).Area \\f \"%lu6%qf1%ct8[1e-006]\">%"
))
(if (setq p (getpoint "\n Укажите ячейку таблицы: " ))(progn
(if (= :vlax-true (vla-HitTest obj
(vlax-3d-point (trans p 1 0)) (vlax-3d-point (trans (getvar "VIEWDIR") 1 0)) 'row 'col))
(vla-SetText obj row col s)
)
)) ;_endof if progn
)
) ;cond
)
(t
(princ "\n Это не таблица!")
)
) ;cond
(vl-cmdf "_.UNDO" "_e")
(setvar "CMDECHO" echo)
(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Та Въпроса върху който се чудя е ...
Колко е възможно средно грамотен Потребител на AutoCAD , разполагащ с набор от Относително Универсални лиспове , да си ги редактира според конкретният случай и да си ги ползва ? Всъщност ще подлежи на редактиране най-вече Field expression.



Цялата тема
ТемаАвторПубликувано
* dynamic block & Field в AutoCAD Mинaвaщ   17.11.06 14:46
. * Re: Примерно Mинaвaщ   18.11.06 04:03
. * Re: dynamic block & Field в AutoCAD magesnik   20.11.06 17:13
. * Re: EATTEXT Mинaвaщ   20.11.06 20:05
. * Re: dynamic block & Field в AutoCAD Пoдoбъp   23.11.06 01:02
. * Re: dynamic block & Field в AutoCAD magesnik   23.11.06 10:10
. * Re: dynamic block & Field в AutoCAD Пoдoбъp   25.11.06 17:26
. * Re: dynamic block & Field в AutoCAD magesnik   27.11.06 09:40
. * Re: dynamic block & Field в AutoCAD Пoдoбъp   28.11.06 01:10
. * да си говорим за 3д magesnik   28.11.06 09:38
. * Re: dynamic block & Field в AutoCAD Пoдoбъp   23.11.06 01:04
. * Re: dynamic block & Field в AutoCAD Mинaвaщ   23.11.06 03:42
. * Re: dynamic block & Field в AutoCAD Пoдoбъp   25.11.06 17:10
. * Re: ... & Field в AutoCAD Mинaвaщ   26.05.07 18:45
. * Re: .... Field в AutoCAD + AutoLISP Mинaвaщ   10.09.07 00:50
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.