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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вопрос к ГУРУ only :) Таблицы в AUTOCAD 2005

Вопрос к ГУРУ only :) Таблицы в AUTOCAD 2005

Ответ
Поиск в этой теме
Непрочитано 26.08.2004, 11:05 #1
Вопрос к ГУРУ only :) Таблицы в AUTOCAD 2005
X-DeViL
 
Бизнес-шмизнес
 
Питер
Регистрация: 26.05.2004
Сообщений: 1,911

Вопрос следующий...

Известно что в таблицы можно вставлять Fields, а в филде можно выводить значение полученое на diesel expression. Так вот вопрос в следующем... могу ли я в diesel'e сделать так чтобы филд принимал значение по формуле? например соседняя ячейка + еще одна соседняя ячейка

т.е. как в excel'e
Просмотров: 7337
 
Непрочитано 26.08.2004, 19:00
#2
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Очень интересный бопрос!!!!!!!!
Я попробовал и так и сяк - незнаю толком как и подступится??????
Ау!!! может кто пробиовал - уж очень интересные возможности могут открыться
если возможно.........
Startrek вне форума  
 
Непрочитано 26.08.2004, 19:33
#3
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Вот что я попробовал на скорую руку
Ехпортировать Акад Таблицу (Table) в Eхcel и в нем родимом делать сумму по колонкам итд.
Вот только не придумал как обратно в Акад Таблицу закинуть результат??????????? COPY/PASTE ?????
Startrek вне форума  
 
Непрочитано 26.08.2004, 20:51
#4
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Может это поможет http://www.autocad.ru/support/ts_2004-07-12
Vova вне форума  
 
Автор темы   Непрочитано 27.08.2004, 12:08
#5
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


Startrek
Хорошо.. начнем с самого простого... как сделать так чтобы филд принимал значение А+В? затем самый сложный вопрос: как получить значение ячейки таблицы?
X-DeViL вне форума  
 
Непрочитано 27.08.2004, 13:07
#6
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


Цитата:
Сообщение от X-DeViL
Startrek
Хорошо.. начнем с самого простого... как сделать так чтобы филд принимал значение А+В? затем самый сложный вопрос: как получить значение ячейки таблицы?
C простого говоришь?
На Diesel оно не получится, без Vlisp не обойтись.
Почти все о Table - здесь - mk:@MSITStore:C:\Program%20Files\Aut...ble_Object.htm
Как выход - писать утиль.
А получить значение - пожалуйста.

Код:
[Выделить все]
;;; Получение текста последней ячейки таблицы
(setq table (vlax-ename->vla-object(car(entsel)))
		rows (vla-Get-Rows table)
		Columns (Vla-get-Columns table)
		whererow (1- rows)
		wherecolumn (1- Columns)
		textvalue (vla-gettext table whererow wherecolumn))
BigBrother вне форума  
 
Непрочитано 27.08.2004, 13:38
#7
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Как выход - писать утиль.
Некое подобие Екселя на Лиспе? :wink: Кажись, возможности языка позволяют
vk вне форума  
 
Непрочитано 27.08.2004, 20:02
#8
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Вот на скорую руку соорудил на основе BigBrother идеи
Вроде работает

Код:
[Выделить все]
(defun c:ttr(/ tbl rws clmns i i2 nr nc tx txa tx1 txx1 sum lu)
(setq tbl (vlax-ename->vla-object(car(entsel)))) 
(setq rws (vla-Get-Rows tbl)) 
(setq Clmns (Vla-get-Columns tbl)) 
(setq i (- rws 0))
(alert"\nSelect the Column to summarize\nstarting from 0, left to right")
(setq i2 (getint "\nColumn Number to Summarize <0>: "))
(if (= i2 nil)(setq i2 0))
(setq nr i)
(setq nc i2)
(setq tx (vla-gettext tbl nr nc))
(setq txa (atof tx))
(while
        (> i 0)
	(setq nr i)
        (setq nc i2)
        (setq tx1 (vla-gettext tbl nr nc))
	(setq txx1 (atof tx1))
	(setq sum (+ txx1 txa))
	(setq txa sum)
        (setq i (- i 1))
        ;(setq i2(+ i2 1))
)
(setq lu (getvar "lunits"))
(cond
((= lu 4)(command"mtext" pause "w" "0" (rtos sum 4 2) "" ""))
((= lu 2)(command"mtext" pause "w" "0" (rtos sum 2 2) "" ""))
)
(princ)
)
Startrek вне форума  
 
Непрочитано 27.08.2004, 22:06
#9
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


В развитие темы...
(command"mtext"....
Заменить на (Vla-settext %row% %column% newtext)
BigBrother вне форума  
 
Непрочитано 28.08.2004, 05:09
#10
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Подправил - теперь работает лучше.
А МТЕХТ использую чтоб видеть куда лепиш текст


Код:
[Выделить все]
(defun c:tbls(/ tbl rws clmns i i2 nr nc tx txa tx1 txx1 sum lu) 
(setq tbl (vlax-ename->vla-object(car(entsel)))) 
(setq rws (vla-Get-Rows tbl)) 
(setq Clmns (Vla-get-Columns tbl)) 
(setq i (- rws 0)) 
(alert"\nSelect Table Column Number to add fields\nstarting from 0, left to right") 
(setq i2 (getint "\nSelect Table Column Number to add fields<0>: ")) 
(if (= i2 nil)(setq i2 0)) 
(setq nr i) 
(setq nc i2) 
(setq tx (vla-gettext tbl nr nc)) 
(if (= tx "") (setq tx "0"))
(setq txa (distof tx 4)) 
(while 
        (> i 0) 
        (setq nr i) 
        (setq nc i2) 
        (setq tx1 (vla-gettext tbl nr nc)) 
        (if (= tx1 "") (setq tx1 "0"))
        (setq txx1 (distof tx1 4)) 
        (setq sum (+ txx1 txa)) 
        (setq txa sum) 
        (setq i (- i 1)) 
) 
(setq lu (getvar "lunits")) 
(cond 
((= lu 4)(command"mtext" pause "w" "0" (rtos sum 4 2) "")) 
((= lu 2)(command"mtext" pause "w" "0" (rtos sum 2 2) "")) 
) 
(princ) 
)
Startrek вне форума  
 
Автор темы   Непрочитано 31.08.2004, 09:54
#11
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


Так как я не сильно разбираюсь и в Лиспе и в Дизеле, то вопрос...

То что вы сейчас написали - это наскока я понял на Лиспе

Еще вопрос... как я понял... дизель это язык представляющий из себя просто список команд которые посылаются в командную строку... короче... я запутался... чем дизель от лиспа отличается... ведь лисп тоже в command line посылается?

К чему это я все объясню как тока ответите )) есть идея просто )
X-DeViL вне форума  
 
Непрочитано 31.08.2004, 17:01
#12
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


DISEL простой язык, в основном для меню. AutoLISP/VLISP - язык AutoCADA, разновидность LISP сложного и очень старoго kомпютерного языка (как C BASIC итд)
Startrek вне форума  
 
Автор темы   Непрочитано 31.08.2004, 18:45
#13
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


Так вот простой вопрос... можно ли в дизеле вызывать ЛИСПовские скрипты ) и как ) причем было бы интересно... (сразу в ОДНОМ филде генерить ЛИСП скрипт, и тутже его использовать ИДЕЯ понятна? (но генерить ЛИСП тока в одном филде на чертеже) (ну спасибо за объяснение, как ребенку в песочнице ) зато я все понял...) кстати пытался я в свое время взяться за лисп.... но как-то не пошло... )

По поводу сразу возникаюших возражений... мол зачем генерить лисп в филде если его мона подгрузить а очень просто... чертежик кочует туда сюда.. и все скинуть лисп нереально...
X-DeViL вне форума  
 
Непрочитано 31.08.2004, 19:12
#14
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Непонимаю зачем??? AutoLISP загружается ц меню, кнопок или тулпалетс, автоматиочески или по требованию.
А прилепить целый лисп к field ну никак не возможно уж очень большой. Короче ты хочешь нописать програмку на простом DISEL которая будетр писать програмку на более сложном языке при нажатии на кнопку/фиелд итд?
Мдаааа.....
Startrek вне форума  
 
Непрочитано 31.08.2004, 19:42
#15
BigBrother

Design & programming :)
 
Регистрация: 14.02.2004
Новосибирск
Сообщений: 172
<phrase 1= Отправить сообщение для BigBrother с помощью Skype™


Цитата:
Сообщение от X-DeViL
Так вот простой вопрос...
На все твои вопросы - нет
Diesel - простой язык обрабатывающий строки. В нем нет (почти) процедур присваивания\считывания переменных.
Написать приложение для твоей задачи - возможно. Но это труд и немалый. Кстати, сейчас проверить не на чем, поддерживают ли FIELD вложенность? Если поддерживают, то можно их генерить по принципу
<Diesel <propTXT1> <propTXT2>>...
BigBrother вне форума  
 
Автор темы   Непрочитано 01.09.2004, 09:22
#16
X-DeViL

Бизнес-шмизнес
 
Регистрация: 26.05.2004
Питер
Сообщений: 1,911


to ALL
Короче, понятно... буду делать ручками ) а так хотелось АУТОМАТИЧНО ))))
X-DeViL вне форума  
 
Непрочитано 01.09.2004, 17:34
#17
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Меня вопрос заинтересовал.
Сотворил простенький калькулятор для таблиц.Отдаю
на обкатку.
Код:
[Выделить все]
(defun C:table-f ()
  (if
    (and
      (setq tbl-obj (car
		      (entsel "\n Выберите таблицу:")
		    )
      )
      (equal
	(vla-get-objectname
	  (vlax-ename->vla-object tbl-obj)
	)
	"AcDbTable"
      )
    )					;and
     (progn
       (initget "*  +")
       (setq aop (getkword "\n Введите знак операции[*  +][+]:"))
       (if (not aop)
	 (setq aop "+")
       )				;if
       (setq aop (read aop))
       (initget "Строка Колонка")
       (setq
	 cr (getkword
	      "\n Выполнять операцию над [Строка \ Колонка][Строка]:"
	    )
       )
       (if
	 (not cr)
	  (setq cr "Строка")
       )				;if
       (setq data (mapcar 'cdr
			  (vl-remove-if-not
			    '(lambda (x)
			       (= (car x) 1)
			     )
			    (entget tbl-obj)
			  )
		  )
       )
       (setq tbl-obj
	      (vlax-ename->vla-object tbl-obj)
       )

       (setq size (list
		    (vla-get-columns tbl-obj)
		    (vla-get-rows tbl-obj)
		  )
       )				;setq

       (setq data (cdr (data-list data (car size))))
       (if (equal cr "Колонка")
	 (setq data (apply 'mapcar (cons 'list data)))


       )				;if

       (setq
	 data (mapcar '(lambda (y)

			 (setq y (mapcar '(lambda (w)
					    (vl-string-translate "," "." w)
					  )
					 (reverse (cdr (reverse y)))
				 )
			 )

			 (setq y (vl-remove-if-not
				   '(lambda (z)
				      (or
					(equal (type (read z)) 'INT)
					(equal (type (read z)) 'REAL)
				      )
				    )
				   y
				 )
			 )
			 (mapcar 'distof y)
		       )
		      data
	      )
       )				;setq
       (setq data (mapcar 'rtos
			  (mapcar '(lambda (q)
				     (apply aop q)
				   )
				  data
			  )
		  )
       )

       (if
	 (equal cr "Строка")
	  (progn
	    (setq j 1)
	    (foreach k data
	      (vla-settext tbl-obj j (1- (car size)) k)
	      (setq j (1+ j))
	    )
	  )
	  (progn
	    (setq j 0)
	    (foreach k data
	      (vla-settext tbl-obj (1- (cadr size)) j k)
	      (setq j (1+ j))
	    )
	  )

       )
     )
  )
  (princ)
)

(defun data-list (lst memb / rez rez2)

  (setq i 0)
  (foreach x lst
    (setq i (1+ i))
    (if
      (and
	(/= i 1)
	(zerop
	  (rem
	    (1- i)
	    memb
	  )
	)
      )
       (progn
	 (setq rez
		(cons
		  (reverse rez2)
		  rez
		)
	 )
	 (setq rez2 '())
       )
    )

    (setq rez2 (cons x rez2)
    )
  )
  (setq	rez (reverse
	      (cons
		(reverse rez2)
		rez
	      )
	    )
  )
)
Эдуард вне форума  
 
Непрочитано 22.09.2004, 12:34
#18
*Voland*


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


Люди, а нельзя ли как-нибудь прооооще.
В 2000 версии было проще - выбираем %Product entries или что-то на это похожее, в меню Edit>Paste Special и усе. Затем немного подредактировав получаем красивую табличку. Если вставлять как лист Exel, во-первых, раздражает белый экселевский фон, а во-вторых работать не удобно.
 
 
Непрочитано 07.12.2004, 16:42
#19


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


А почему бы и сейчас так не делать?

В 2005-м если при вставке выбрать AutoCAD Entities получаешь отличную табличку (Table).
 
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вопрос к ГУРУ only :) Таблицы в AUTOCAD 2005

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

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