Jump to content

Как подсветить один элемент из набора?


Recommended Posts

Надо подсветить таблицу для передачи ее штатной команде экспорт в Excel

(defun C:drz_ExpotrSumRepSS ()
	(setq ss1 (ssget "_A" '((0 . "SPDSTABLE2")(300 . "Отчет сводный"))))
	(sssetfirst nil ss1)
	(command "TABLEEXCELEXPORT")
	; (princ)
)  

если таблица одна, то экспортируется нормально, а вот если несколько, то набор слетает и нана просит выбрать таблицу..

Собственно вопрос, как подсветить только один объект из выбора?

Link to comment
Share on other sites

Ну преобразовывай набор в список ename-указателей и передавай их по одному, делов-то. Код писать (учитывая что я не знаю насколько корректно будут работать команды)?

  • Like 1
Link to comment
Share on other sites

1 минуту назад, kpblc сказал:

преобразовывай набор в список ename-указателей

Спасибо, почитаю

Link to comment
Share on other sites

блиин

(setq ss1 (ssget "_A" '((410 . (getvar "CTAB"))))) ;неверный тип аргумента: STRINGP: SCTAB
;или
(setq ss1 (ssget "_A" '((cons 410 (getvar "CTAB"))))) ;неверный тип аргумента: INT: CONS

как так то??

""Model" ищет исправно(((

Link to comment
Share on other sites

У меня в библиотеке на гитхабе есть что-то типа _kpblc-conv-selset-to-ename - оно "само по себе", ничего больше, насколько я помню, не требует.

P.S. В цикле попробуй нечто типа
(command "TABLEEXCELEXPORT" entity) - вдруг сработает?

добавлено через 0 минут
1 минуту назад, doctorraz сказал:

блиин

Эммм...

(setq ss1 (ssget "_A" (list (cons 410 (getvar "ctab")))))

добавлено через 1 минуту

Че-то ты заработался. "Отдыхать вам нужно, таищ майор!"(с)

  • Thanks 1
Link to comment
Share on other sites

57 минут назад, doctorraz сказал:

Собственно вопрос, как подсветить только один объект из выбора?

В любом случае нужно из набора удалить все, что не нужно.

Для этого необходим критерий.

А из примера непонятно, что собственно хотелось бы подсветить.

 

Спойлер

    (defun C:drz_ExpotrSumRepSS ( / ss1 i nab el )
    (setq ss1 (ssget "_A" '((0 . "SPDSTABLE2"))))
    (setq i 0)
    (repeat (sslength ss1)
    (setq el (ssname ss1 i))
    (setq nab (ssadd))
    (setq nab (ssadd el nab))
    ;(sssetfirst nil nab) ;непонятно зачем
      (command "TABLEEXCELEXPORT" nab)
      (setq i (1+ i)))
      
    (princ)

 

 

Link to comment
Share on other sites

Posted (edited)
3 часа назад, kpblc сказал:

вдруг сработает

Если таблиц больше одной, ине пофих, нужна любая одна, там будут одинаковые данные

3 часа назад, kpblc сказал:

Че-то ты заработался

Дома проверю, но в АК это работает upd нет конечно))))

Edited by doctorraz
Link to comment
Share on other sites

12 минут назад, EdwardSt сказал:

   (defun C:drz_ExpotrSumRepSS ( / ss1 i nab el )
    (setq ss1 (ssget "_A" '((0 . "SPDSTABLE2"))))
    (setq i 0)
    (repeat (sslength ss1)
    (setq el (ssname ss1 i))
    (setq nab (ssadd))
    (setq nab (ssadd el nab))
    ;(sssetfirst nil nab) ;непонятно зачем
      (command "TABLEEXCELEXPORT" nab)
      (setq i (1+ i)))
      
    (princ)

Я бы сто раз подумал, прежде чем так поступать. Общее количество наборов не может превышать 256 (по крайней мере в ACAD). А тут с наборами какая-то жесть творится.

---

Добавлю: ключ "_A", насколько я помню, тем и отличается от "_X", что выбирает в активном пространстве. Так что дополнительная фильтрация по 410 группе не совсем нужна.

---

Добавлю:

Если все же использовать мои _kpblc-*.lsp, то можно сделать нечто типа:
(defun c:123( / selset)

(if (setq selset (ssget "_A" '((0 . "SPDSTABLE2"))))

(foreach item (_Kpblc-conv-selset-to-ename selset)

(command "tableexport" (handent (cdr(assoc 5 (entget item)))) "")

)

)

  • Like 1
Link to comment
Share on other sites

Или

Спойлер

(defun C:drz_ExpotrSumRepSS ( / ss1 nab )
    (setq ss1 (ssget "_A" '((0 . "SPDSTABLE2") (300 . "Отчет сводный"))))
    (if ss1
    (progn
      (setq nab (ssadd))
      (setq nab (ssadd (ssname ss1 0) nab))
      (command "TABLEEXCELEXPORT" nab)
      (sssetfirst nil nab) ;непонятно зачем
      ))
       
    (princ)

 

  • Thanks 1
Link to comment
Share on other sites

Ну если совсем уж извращаться, то и набор можно сформировать повеселее:

(setq ss1 (ssget "_.+:L:S:E" '((0 . "SPDSTABLE2") (300 . "Отчет сводный"))))

Как-то так примерно. Будет в нано работать или нет- не представляю

  • Like 1
Link to comment
Share on other sites

25 минут назад, kpblc сказал:

Я бы сто раз подумал, прежде чем так поступать. Общее количество наборов не может превышать 256 (по крайней мере в ACAD). А тут с наборами какая-то жесть творится.

 В данном примере после каждой итерации набор "зануляется". Потому превышения быть не должно.

А подсветка в любом случае предполагает создание набора.

Тут уж только ограничивать хотелку нужно.

А создание первоначального набора вроде вообще не было предметом вопроса. Не?

Link to comment
Share on other sites

25 минут назад, kpblc сказал:

не может превышать 256 (по крайней мере в ACAD)

В нк дошел до 600))

25 минут назад, kpblc сказал:

ключ "_A", насколько я помню, тем и отличается от "_X", что выбирает в активном пространстве

В нк по всему чертежу, насколько я понял, а надо по активному, иначе на экспорт не передать

23 минуты назад, kpblc сказал:

Будет в нано работать или нет- не представляю

Проверю

добавлено через 3 минут
2 минуты назад, EdwardSt сказал:

создание первоначального набора вроде вообще не было предметом вопроса. Не?

Сперва нет, но чот ssget c CTAB не дружит(( у меня в нано

добавлено через 6 минут
32 минуты назад, EdwardSt сказал:

непонятно зачем

На строчку выше поднять...

Упсс а что TABLEEXCELEXPORT набор принимает??? Ооо, тогда подсветка не нужна конечно

Link to comment
Share on other sites

5 минут назад, doctorraz сказал:

Сперва нет, но чот ssget c CTAB не дружит(( у меня в нано

тогда может более точно конкретизировать, что именно нужно выбрать?

(ssget очень уж заморочная функция...

Link to comment
Share on other sites

4 минуты назад, EdwardSt сказал:

может более точно конкретизировать, что именно нужно выбрать?

Одну таблицу с заданным именем в текущем пространстве

PS почему одну и любую, юзер может их сколько хошь напихать, но в пределах пространства эти таблицы одинаковые, поэтому любую

Link to comment
Share on other sites

8 минут назад, doctorraz сказал:

На строчку выше поднять...

Упсс а что TABLEEXCELEXPORT набор принимает??? Ооо, тогда подсветка не нужна конечно

Кстати, предварительный выбор (предполагаю, это то, что хотелось подсветить) для команды TABLEEXCELEXPORT у меня не работает. Только указание таблицы сразу после команды. Это существенное отличие от многих других команд. Т.е., в данном случае подсветка просто бессмысленна.

добавлено через 1 минуту
Только что, doctorraz сказал:

поэтому любую

значит можно первую в наборе.

Тогда остается исследовать и подобрать работоспособную комбинацию для (ssget ...

добавлено через 5 минут
15 минут назад, doctorraz сказал:

Упсс а что TABLEEXCELEXPORT набор принимает???

принимает и набор, и просто имя элемента.

Т.е. в моем примере эти команды были бы равносильны


      (command "TABLEEXCELEXPORT" nab)   и

(command "TABLEEXCELEXPORT" (ssname ss1 0) ) 

Link to comment
Share on other sites

28 минут назад, EdwardSt сказал:

Т.е., в данном случае подсветка просто бессмысленна

код из первого поста если одна таблица у меня работает

до дома доберусь, буду разбираться дальше

 

 

Link to comment
Share on other sites

2 часа назад, kpblc сказал:

Ну если совсем уж извращаться, то и набор можно сформировать повеселее:

(setq ss1 (ssget "_.+:L:S:E" '((0 . "SPDSTABLE2") (300 . "Отчет сводный"))))

Как-то так примерно. Будет в нано работать или нет- не представляю

:) В nanoCAD, так нельзя! И это ещё одно отличие от AC.

Можно использовать только один метод выбора. Иначе выкинет исключение.

  • Like 1
Link to comment
Share on other sites

Posted (edited)

Огромное всем СПАСИБО!!!

у LeeMac http://lee-mac.com/ssget.html

ключ Х  ищет по всей базе чертежа, на всех слоях

А тоже но исключает замороженные слои

---------------------------

в итоге получилось вот такое:

;отчет в эксель
(defun C:drz_ExpotrSumRep ( / ss1 sexo )
	(setq sexo (getvar "CMDECHO"))
	(setvar "CMDECHO" 0)
	
	(setq ss1 (ssget "_X" (list (cons 410 (getvar "ctab"))(cons 0 "SPDSTABLE2")(cons 300 "Отчет сводный"))))
	(if ss1
		(progn
			(command "TABLEEXCELEXPORT"  (ssname ss1 0)) 
		)
		(progn
			; добавим таблицу из БД "Отчет сводный" в @@пу мира
			(command "spStdSelected" "55DFC3682ED43A72" "1000000000,1000000000")
			;поищем ее
			(setq ss1 (ssget "_X" (list (cons 410 (getvar "ctab"))(cons 0 "SPDSTABLE2")(cons 300 "Отчет сводный"))))
			(if ss1
				(progn
					;экспортируем из нее в эксель
					(command "TABLEEXCELEXPORT" (ssname ss1 0)) 
					;и прибьем					
					(command "erase" (ssname ss1 0) "")
				)
				(princ "\n Отчета нет ни в базе ни в чертеже")
			)
		)
	)
	(setvar "CMDECHO" sexo)
	(princ)
)

 

как раньше люди без интернета программировали????))))))
Edited by doctorraz
улучшайзинг
Link to comment
Share on other sites

12 часов назад, Maksim Yablokv сказал:

В nanoCAD, так нельзя! И это ещё одно отличие от AC.

Не знал.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт Разработка? Tell a friend!
×
×
  • Create New...