я получу пользовательский блок в файле .dwg из списка блоков, которые я буду программно анализировать в Java.
Как просмотреть имена всех блоков файла .dwg в консоли AutoCAD CORE?
Ответы (2)
Вы можете использовать команду INSERT с опцией ?
cd C:\Program Files\Autodesk\AutoCAD 2016
accoreconsole.exe /i "Sample\Database Connectivity\Floor Plan Sample.dwg"
Command: _INSERT
Enter block name or [?]: ?
Enter block(s) to list <*>:
Defined blocks.
"CHAIR7"
"COMPUTER"
"DESK2"
"DESK3"
"DOOR"
"DR-36"
"DR-69P"
"DR-72P"
"FC15X27A"
"FC42X18D"
"FNPHONE"
"IBMAT"
"KEYBOARD"
"NCL-HL"
"RECTANG"
"RMNUM"
"SOFA2"
User Unnamed
Blocks Blocks
17 0
Я не знаком с Core Console
, но для вывода всего блока в файл DWG
вам нужно использовать LISP
s. Что-то вроде axBlock
из jtbworld. Вы также можете издеваться над кодом LISP и вызывать его через SCRIPT
.
Редактировать:
Скопируйте и вставьте следующий код в Notepad
и сохраните его как axBlock.lsp
в корне вашего диска C
(например):
(defun c:axblocks (/ b bn tl)
(vlax-for b (vla-get-blocks
(vla-get-ActiveDocument (vlax-get-acad-object))
)
(if (= (vla-get-islayout b) :vlax-false)
(setq tl (cons (vla-get-name b) tl))
)
)
(reverse tl)
)
Я только что немного подправил код jtbworld, чтобы вам было проще.
Теперь у вас есть готовый код LISP, и вам нужно только загрузить его в AutoCAD. У вас есть несколько вариантов для этого:
- Используйте команду APPLOAD в AutoCAD и найдите
axBlock.lsp
, который вы только что создали. - Перетащите
axBlock.lsp
в окно AutoCAD. Вызовите
axBlock.lsp
через файл сценария. А скрипты на самом деле не что иное, как простой текстовый файл с расширением*.scr
. Для этого вам просто нужно, чтобы эта строка кода находилась в вашем файле сценария:(load "C:\\axBlock.lsp")
После выполнения любого из трех вышеперечисленных методов, если вы наберете axBlock
в AutoCAD и нажмете Enter
, вы увидите список существующих блоков.
Более того, если вы следовали подходу № 3 из приведенного выше списка, вы можете сделать ярлык и вызвать axBlock
в файле скрипта, т.е. вы загружаете и вызываете функцию одним нажатием. Если вы хотите это сделать, просто добавьте axBlock
во вторую строку кода вашего скрипта. Обратите внимание на дополнительные SPACE
после axBlock
I looked at the documentation [link to documentation here] and couldn't find a way to do this.
- person nkorth   schedule 10.08.2015