Как выявить 3Д чертежи из тысяч штук?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как выявить 3Д чертежи из тысяч штук?

Как выявить 3Д чертежи из тысяч штук?

Ответ
Поиск в этой теме
Непрочитано 21.10.2005, 17:54 #1
Как выявить 3Д чертежи из тысяч штук?
Danilin
 
Сообщений: n/a

Как в массе тысяч чертежей выявить те, что имеют 3Д элементы?
Как сделать это стандартными средствами поиска Windows?
Просмотров: 7511
 
Непрочитано 22.10.2005, 00:12
#2
VetalBY


 
Регистрация: 16.05.2005
г. Минск
Сообщений: 276


гы, стандартными средствами поиска Windows имхо не получится
программку надо писать или искать уже написанную....
VetalBY вне форума  
 
Непрочитано 22.10.2005, 15:54
#3
Danilin


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


Простой вопрос, а поставил всех в тупик...
 
 
Непрочитано 22.10.2005, 16:40
#4
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,761
Отправить сообщение для Огурец с помощью Skype™


Уважаемый Данилин!
Достаточно, чтобы хоть одна координата Z отличалась от 0, и чертёж уже будет по всем признакам трёхмерным. Тут просто аккуратность требуется. И внимание.
Огурец вне форума  
 
Непрочитано 22.10.2005, 18:13
#5
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Danilin
Цитата:
Как сделать это стандартными средствами поиска Windows?
Да никак. Если не написать пограмму на С++, Delphi etc.

В самом AtuoCAD обработать определёноое количество чертежей с целью поиска 3DMesh, 3DSolid или просто координат Z отличающихся от 0.0 не составляет проблемы.

Вопрос. Хочет ли вам кто нибудь помогать? Коллекцию хотите отсортировать?
{Smirnoff} вне форума  
 
Непрочитано 24.10.2005, 19:33
#6
Danilin


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


Стандартный поиск - найти *.dwg. Нашёл.
Вид - ЭСКИЗЫ (у меня в WXP dwg показывает). Визуально смотрим и находим 3Д с вероятностью 90%.
Другого способа не существует?
 
 
Непрочитано 24.10.2005, 19:33
#7
Danilin


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


Стандартный поиск - найти *.dwg. Нашёл.
Вид - ЭСКИЗЫ (у меня в WXP dwg показывает). Визуально смотрим и находим 3Д с вероятностью 90%.
Другого способа не существует?
 
 
Непрочитано 24.10.2005, 20:11
#8
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


>Danilin
А если превьюхи в файле не сохраняются (особенно если формат версий 12 или 14) или на экране показывается пустой экран(т.е. 3D за пределами экрана во время сохранения превью). Уже доверять методу опасно :?
asys вне форума  
 
Непрочитано 25.10.2005, 11:21
#9
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Danilin, я тут наваял кое-что, должно работать. Прежде чем радостно запускать, создайте текстовый файл-список file_list.txt, в котором полное имя каждого проверямого dwg-файла занимает отдельную строку.
Код:
[Выделить все]
(defun C:3D_Hunt ( / cmd n_doc file_lst 3d_lst 3d_pts lst msg)
  (vl-load-com)
  (setq	cmd (getvar "CMDECHO")
	n_doc (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.16")
        file_lst (open "file_list.txt" "r"))
  (while file_lst 
    (read-line file_lst) (vla-open n_doc (findfile dwg)) 
    (setq ms (vla-get-ModelSpace n_doc))
    (vlax-for obj ms
      (cond ((= (vla-get-ObjectName obj) "AcDbBlockReference")
             (if (/= (last (vlax-get obj 'InsertionPoint)) 0.000)
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));block
            ((or (= (vla-get-ObjectName obj) "AcDbLine")
                 (= (vla-get-ObjectName obj) "AcDbArc")
                 (= (vla-get-ObjectName obj) "AcDbEllipse"));or
             (if (vl-some '(lambda (x) (= x 0.000))
                   (mapcar '(lambda (x) (last (vlax-get obj x))) '(StartPoint EndPoint)))
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));line
            ((= (vla-get-ObjectName obj) "AcDbLWPolyine")
             (if (/= (vla-get-elevation obj) 0.000)
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));LWPolyine
            ((= (vla-get-ObjectName obj) "AcDbPolyine")
             (setq coor_lst (vlax-get obj 'Coordinates))
             (while coor_lst (if (/= (caddr coor_lst) 0.000)
                               (setq 3d_pts (cons (caddr coor_lst) 3d_pts)))
               (setq coor_lst (cdddr coor_lst)));while
             (if (vl-some '(lambda (x) (= x 0.000)) 3d_pts)
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));Polyine
            ((or (= (vla-get-ObjectName obj) "AcDbCircle") (= (vla-get-ObjectName obj) "AcDbEllipse"))
             (if (/= (last (vlax-get obj 'Center)) 0.000)
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));Circle
      );cond
    );vlax-for
    (if (null 3d_lst) (setq msg "No Drawings with 3-D entities!")
      (progn (while 3d_lst (setq lst (if lst (strcat lst "\n" (car 3d_lst)) (car 3d_lst))
                                 3d_lst (cdr 3d_lst)));while
        (setq msg (strcat "\nThe Following Drawings contain 3-D entities: \n" lst))));if
    (alert (strcat "Congratulations! \n" msg))
  );while
  (setvar "CMDECHO" cmd)
);end
Я рассматривал только 2-D элементы на предмет наличия координаты Z, отличной от нуля. Программу можно дополнить проверкой на наличие трехмерных сетей и тел, но это уже - сама-сама-сама (С). Идея программы, я полагаю, ясна.
Лентяй вне форума  
 
Непрочитано 27.10.2005, 18:29
#10
Danilin


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


Очевидно, можно переделать Вашу прогу для поиска "нужного слоя", "нужного чего-то там"?
Но как составить список DWG-файлов со всего диска?
 
 
Непрочитано 27.10.2005, 23:53
#11
Демиан


 
Регистрация: 28.08.2005
Сообщений: 32


dir *.dwg /b > file_list.txt
Вставляешь в командную строку Total Commander и жмешь ввод.
Демиан вне форума  
 
Непрочитано 30.10.2005, 09:37
#12
Danilin


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


Список файлов лучше готовить в Total Commander. Каждому файлу даётся его путь на диске. Остаётся перевести это в текстовый формат: можно сделать Print Screen 10 раз и распознать в Fine Reader. Имена файлов должны быть англоязычными, чтобы распознаватель не путался, а потом можно применить поиск и замену похожих рус.-англ. букв.
Всё стандартными средствами, но неужели нет программы, составляющей списки файлов с их путями?!
 
 
Непрочитано 30.10.2005, 13:25
#13
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Danilin
Список файлов лучше готовить в Total Commander. Каждому файлу даётся его путь на диске. Остаётся перевести это в текстовый формат: можно сделать Print Screen 10 раз и распознать в Fine Reader. Имена файлов должны быть англоязычными, чтобы распознаватель не путался, а потом можно применить поиск и замену похожих рус.-англ. букв.
Всё стандартными средствами, но неужели нет программы, составляющей списки файлов с их путями?!
Список файлов (если не устраивает совет Демиан) в Total Commander делается элементарно - выделяются файлы, любым способом, может быть после поиска) и применяется команда, примерно называемая "Список с полными путями в файл". Такое действие обычно привязывается к меню "Запуск" - в Total тьма скрытых команд, не отраженных в главном меню.

Хотя можно через PrintScreen и Fine Reader. Плюс PhotoShop. Но это для очень редких вундеркиндеров.
ShaggyDoc вне форума  
 
Непрочитано 30.10.2005, 13:38
#14
Демиан


 
Регистрация: 28.08.2005
Сообщений: 32


Запусти Total Commander, нажми Alt+F7, появится окно "Поиск файлов"(Search for), в строке искать файлы набери *.dwg; в строке "Место поиска"(Search for), выбери нужный диск(Drives). Жми кнопку "Начать поиск"(Start search), после завершения поиска нажми кнопку "Файлы на панель"(Feed to listbox) (в этом же окне). Жми Ctrl+A, потом лезь в меню Выделение\Сохранить выделение в файл...(Mark\Save celection to file). Задаешь нужное имя файла: file_list.txt. Все.
Опередили, блин. :-)
Демиан вне форума  
 
Непрочитано 30.10.2005, 14:24
#15
forMA


 
Регистрация: 25.08.2005
Сообщений: 2,556


Запустите Total Commander. Затем Ctr- B. И сортировку по расширению. Все dwg файлы будут перед глазами.
forMA вне форума  
 
Непрочитано 31.10.2005, 01:08
#16
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Daninlin, мне больно видеть :cry: . на какие муки из самых лучших побуждений вас обрекают местные знатоки. Чтобы я смог вам помочь наиболее безболезненным для вас способом, ответьте плз, находятся ли все ваши многочисленные файлы в обной и той же директории или в разумном числе нескольких (не более 5-ти). Если так, то сообщите мне алреса этих директорий, и я из вставлю в тело программы. Если же диретроий больше 5-ти, то самое разумное - ввести строку запроса для группы файлов.
Жду ответа, как соловей лета.
Лентяй вне форума  
 
Непрочитано 31.10.2005, 06:50 Не надо лохматить бабушку!
#17
Barbi

блондинка
 
Регистрация: 13.10.2005
Парк Юрского периода
Сообщений: 6


Danilin, никого не слушай! Printscreen рулит! Fine рулит! Photochop рулит!

Высылаю тебе наложенным платежом ВСЕ диски со ВСЕМИ версиями Prinscreen, Fine Reader и Photoшопа. Ты же делился с людями дисками. :shock:

Отдельно пересылаю на твою почту все письма с рекламами аналогичных продуктов. Может быть удастся и подписать тебя на что-нибудь еще более полезное.
Barbi вне форума  
 
Непрочитано 31.10.2005, 18:59
#18
Danilin


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


Файлы коллекции чётко разделены, Лентяй, вставьте в программу "случайный" путь к файлам, если можно.
Рабочий файлы разбросаны по диску, как у всех.
 
 
Непрочитано 01.11.2005, 08:29
#19
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


> Daniln : Здесь есть функция от ZZZ, которая формирует список файлов с определенной маской по определенному пути. Подключи и пользуйся.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.11.2005, 08:37
#20
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Danilin, держите модифицированную прогу. Введены формирование списка файлов в указанной "по образцу" директории и проверка на существование 3D-объектов (на всякий случай). Надеюсь, что проблем не будет.
Код:
[Выделить все]
(defun C:3D_Hunt ( / cmd n_doc file_lst 3d_lst 3d_pts lst msg)
  (vl-load-com)
  (setq cmd (getvar "CMDECHO")
        n_doc (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.16")
        dir (vl-filename-directory (getfiled "Select Single File" "" "dwg" 8))
        file_lst (cddr (vl-directory-files dir "*.dwg" 1)));setq
  (foreach dwg file_lst 
    (vla-open n_doc (findfile (strcat dir "\\" dwg)))
    (setq ms (vla-get-ModelSpace n_doc))
    (vlax-for obj ms
      (cond ((= (vla-get-ObjectName obj) "AcDbBlockReference")
             (if (/= (last (vlax-get obj 'InsertionPoint)) 0.000)
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));block
            ((or (= (vla-get-ObjectName obj) "AcDbLine")
                 (= (vla-get-ObjectName obj) "AcDbArc")
                 (= (vla-get-ObjectName obj) "AcDbEllipse"));or
             (if (vl-some '(lambda (x) (= x 0.000))
                   (mapcar '(lambda (x) (last (vlax-get obj x))) '(StartPoint EndPoint)))
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));line
            ((= (vla-get-ObjectName obj) "AcDbLWPolyine")
             (if (/= (vla-get-elevation obj) 0.000)
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));LWPolyine
            ((= (vla-get-ObjectName obj) "AcDbPolyine")
             (setq coor_lst (vlax-get obj 'Coordinates))
             (while coor_lst (if (/= (caddr coor_lst) 0.000)
                               (setq 3d_pts (cons (caddr coor_lst) 3d_pts)))
               (setq coor_lst (cdddr coor_lst)));while
             (if (vl-some '(lambda (x) (= x 0.000)) 3d_pts)
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));Polyine
            ((or (= (vla-get-ObjectName obj) "AcDbCircle") (= (vla-get-ObjectName obj) "AcDbEllipse"))
             (if (/= (last (vlax-get obj 'Center)) 0.000)
               (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst))));Circle
            ((or (= (vla-get-ObjectName obj) "AcDb3dSolid")
                 (= (vla-get-ObjectName obj) "AcDbPolygonMesh"))
             (setq 3d_lst (cons (vla-get-name n_doc) 3d_lst)));3d-objects
      );cond
    );vlax-for
    (if (null 3d_lst) (setq msg "No Drawings with 3-D entities!")
      (progn (while 3d_lst (setq lst (if lst (strcat lst "\n" (car 3d_lst)) (car 3d_lst))
                                 3d_lst (cdr 3d_lst)));while
        (setq msg (strcat "\nThe Following Drawings contain 3-D entities: \n" lst))));if
    (alert (strcat "Congratulations! \n" msg))
  );foreach
  (setvar "CMDECHO" cmd)
);end
Лентяй вне форума  
 
Непрочитано 01.11.2005, 14:54
#21
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Лентяй

Всё хорошо, только ИМХО пользоваться Total Comander, как то не очень. Попробуй мою новую писанину.

1-й аргумент. Если T- ищет файлы в указанной папке и подпапках, если Nil то только в указанной папке.
2-й аргумент. Если Т- ищет *.DWG.
3-й аргумент. Если Т- ищет *.DXF.

Файлы в списке располагаются в порядке их следования вниз по "дереву".

Надо бы было ещё обработчик ошибок написать, для подчистки сторонних VLA-объектов, в случае "крушения"...

Код:
[Выделить все]
(defun asmi-GetSubFolderDrawings(
			       
                             ;;;*** ARGUMENTS ***
			       
			     SubFolders	; if not Nil gets files in subfolders
			     Dwg	; if not Nil gets *.dwg files
			     Dxf	; if not Nil gets *.dxf files
			     
			     / Count curDir winMes
			     Direct dirLst dwgLst itm
			     itmCol itmCount ShellApp
			     )
  (vl-load-com)
  (if SubFolders
    (setq winMes "Get files in selected Folder and Subfolders")
    (setq winMes "Get files in selected Folder")
    ); end if
  (if
    (and
    (setq ShellApp
	   (vla-getInterfaceObject
	     (vlax-get-acad-object)
	     "Shell.Application"))
    (setq Direct
	   (vlax-invoke-method ShellApp 'BrowseForFolder
	     0 winMes 0))
	  ); end and
    (progn
      (setq dirLst(list Direct)
	    dwgLst '()
	    ); end setq
      (vlax-release-object ShellApp)
      (setq ShellApp nil)
      (while dirLst
	(setq curDir(car dirLst)
	      itmCol(vlax-invoke-method curDir 'Items)
	      itmCount(vlax-get-property itmCol 'Count)
	      Count 0
	      ); end setq
	(repeat itmCount
	  (setq itm(vla-item itmCol Count))
	  (cond
	    ((and Dwg
	     (= "AutoCAD Drawing"(vlax-get-property itm 'Type))
	      ); end and
	    (setq dwgLst
	     (append dwgLst
		     (list(vla-get-Path itm))))
	    (vlax-release-object itm)
	    (setq itm nil)
	    ); end condition #1
	    ((and Dxf
	     (= "AutoCAD Drawing Interchange"(vlax-get-property itm 'Type))
	      ); end and
	    (setq dwgLst
	     (append dwgLst
		     (list(vla-get-Path itm))))
	    (vlax-release-object itm)
	    (setq itm nil)
	    ); end condition #2
	    ((and SubFolders
	       (= :vlax-true(vlax-get-property itm 'IsFolder))
	       ); end and
	     (setq dirLst
		    (append dirLst
		      (list(vlax-get-property itm 'GetFolder))))
	     ); end condition #3
	  ); end cond
	  (setq Count(1+ Count))
	  ); end repeat
	(setq dirLst(cdr dirLst))
	(vlax-release-object curDir)
	(setq curDir nil)
	); end while
      ); end progn
    ); end if
  dwgLst
  ); end of asmi-GetSubFolderDrawings
{Smirnoff} вне форума  
 
Непрочитано 01.11.2005, 23:57
#22
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Если кто использовал предыдущую функцию, то замените её на новую. У старой наблюдалась большая утечка оперативки.
Код:
[Выделить все]
(defun asmi-GetSubFolderDrawings(
                
                             ;;;*** ARGUMENTS ***
                
              SubFolders   	; if not Nil gets files in subfolders
              Dwg   		; if not Nil gets *.dwg files
              Dxf   		; if not Nil gets *.dxf files
	      Message		; Window message (string)	
              
              / Count curDir winMes
              Direct dirLst dwgLst itm
              itmCol itmCount ShellApp
	      folItm itType
              )
  (vl-load-com)
  (if
    (and
    (setq ShellApp
      (vla-getInterfaceObject
        (vlax-get-acad-object)
        "Shell.Application"))
    (setq Direct
      (vlax-invoke-method ShellApp 'BrowseForFolder
        0 Message 0))
     ); end and
    (progn
      (setq dirLst(list Direct)
       dwgLst '()
       ); end setq
      (vlax-release-object ShellApp)
      (setq ShellApp nil)
      (while dirLst
   (setq curDir(car dirLst)
         itmCol(vlax-invoke-method curDir 'Items)
         itmCount(vlax-get-property itmCol 'Count)
         Count 0
         ); end setq
   (repeat itmCount
     (if
       (and
       (not
	 (vl-catch-all-error-p
	   (setq itm
	    (vl-catch-all-apply
	      'vla-item(list itmCol Count)))))
       (= :vlax-true(vlax-get-property itm 'IsFileSystem))
       (= :vlax-false(vlax-get-property itm 'IsLink))
       ); end and
       (progn
	 (setq itType(vla-get-Type itm))
     (cond
       ((and Dwg
        (= "AutoCAD Drawing" itType)
	     ); end and
       (setq dwgLst
        (append dwgLst
           (list(vla-get-Path itm))))
       ); end condition #1
       ((and Dxf
        (= "AutoCAD Drawing Interchange" itType)
         ); end and
       (setq dwgLst
        (append dwgLst
           (list(vla-get-Path itm))))
       ); end condition #2
       ((and SubFolders
          (= :vlax-true(vlax-get-property itm 'IsFolder))
          ); end and
     (if
       (not
	 (vl-catch-all-error-p
	   (setq folItm
	    (vl-catch-all-apply
	      'vlax-get-property(list itm 'GetFolder)))))
        (setq dirLst
          (append dirLst
            (list folItm)))
       ); end if
        ); end condition #3
     ); end cond
      (vlax-release-object itm)
      (setq itm nil)
        ); end progn
       ); end if
     (setq Count(1+ Count))
     ); end repeat
   (setq dirLst(cdr dirLst))
   (vlax-release-object curDir)
   (setq curDir nil)
   (gc)
   ); end while
      ); end progn
    ); end if
  dwgLst
  ); end of asmi-GetSubFolderDrawings
{Smirnoff} вне форума  
 
Непрочитано 02.11.2005, 09:34
#23
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
{Smirnoff}: Всё хорошо, только ИМХО пользоваться Total Comander, как то не очень.
Ну, дык, эта... Музыкант играет, как умеет. Поэтому стрелять в него низ-з-зя!
Цитата:
Попробуй мою новую писанину.
Попробовал. Функция "Shell.Application" мне очинна понравилась. Это именно то, что нужно и чего я не знал, по каковой причине и пременил свое еорявое посторение путь-через-указание-файла. Так что щирояайшее вам от меня за это мерси. О прочих достоинствах писанины говорить не будем, ибо они очевиды, поговорим лучше о недостатках.
1. В откорркетированном варианте утеряно описание переменной winMes, и непонятно окуда появляеся Message.
2. Не могу представить, при каких условиях выражение
Код:
[Выделить все]
(and (setq ShellApp (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application"))
           (setq Direct (vlax-invoke-method ShellApp 'BrowseForFolder 0 winMes 0)))
может приобретать значение nil, потому как оба подуслувия - всегда Т.
3. Значение
Код:
[Выделить все]
(not (vl-catch-all-error-p (setq itm ...)))
равно Т, если itm не nil. На хрена огород городить, спаршивается? Не проще ли
Код:
[Выделить все]
(if (and (setq itm ...
и далее по тексту?
4.
Код:
[Выделить все]
(and (= :vlax-true (vlax-get-property itm 'IsFileSystem))
                   (= :vlax-false (vlax-get-property itm 'IsLink)));and
- ПМСМ явное излишество, т.к. объект не может быть тем и другим одновременно.
5.
Код:
[Выделить все]
(vla-get-Path itm)
возвращает полное имя файла, а не путь. Поэтому надо применять
Код:
[Выделить все]
(vl-string-right-trim "\\" (vla-get-Path itm))
6.
Код:
[Выделить все]
 (setq dwgLst (append dwgLst (list (vla-get-Path itm)))
Перемудрили-с, батенька. Проще надо быть:
Код:
[Выделить все]
(setq dwgLst (cons (vla-get-Path itm) dwgLst))
7. Проверка на "dfx". Вторично спрашиваю - на хрена? Моя программа с текстовыми файлами не работает.
8.
Код:
[Выделить все]
(if (not (vl-catch-all-error-p (setq folItm (vl-catch-all-apply 'vlax-get-property (list itm 'GetFolder)))))
                       (setq dirLst (append dirLst (list folItm))))
См. п.п. 4 и 5 выше.
9.
Код:
[Выделить все]
(setq Count (1+ Count))
Обрабатывать коллекцию itmCol счетчиком есть, на мой взгляд, дурной тон. Чем вам vlax-for не угодило?
Заключение: Писанина нуждается в доработке. Однако, не смотря на указанные недостатки, вышеобсужденное творение заслуживает быть рекомендованным для применения оной всеми заинтересованными сторонами.
Лентяй вне форума  
 
Непрочитано 02.11.2005, 10:08
#24
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Лентяй
Цитата:
1. В откорркетированном варианте утеряно описание переменной winMes, и непонятно окуда появляеся
Глянь, есть в списке аргументов. Решил сделать так чтобы можно было писать любое сообщение. Ну переменную из списка забыл убрать, каюсь.
Цитата:
2. Не могу представить, при каких условиях выражение
Код:
(and (setq ShellApp (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application"))
(setq Direct (vlax-invoke-method ShellApp 'BrowseForFolder 0 winMes 0)))
А кнопочку Cancel в окне выбора директории жать не пробывали?
Цитата:
3. Значение

Код:
(not (vl-catch-all-error-p (setq itm ...)))
Ну батенька вы даёте... Оно ж для того чтобы отлавливать ошибку исполнения. Если (vl-catch-all-error-p не отлавливает ошибки значит исполняется остальное. Ни T ни Nil в данном случае и в помине нет, есть сообщение о конкретной ошибке.
Цитата:
4.
Код:
(vla-get-Path itm)
возвращает полное имя файла, а не путь. Поэтому надо применять
Надо было для понятности писать (vlax-get-property itm 'Path). В данном случае это свойство 'Path объекта типа FolderItem. Данный объект не Автокадовский и данное его свойство возвращает именно полный путь.
Цитата:
5.
Код:
(setq dwgLst (append dwgLst (list (vla-get-Path itm)))
Перемудрили-с, батенька. Проще надо быть:
(setq dwgLst (cons (vla-get-Path itm) dwgLst))
Дело вкуса, но наверное по твоему лучше.
Цитата:
6. Проверка на "dfx". Вторично спрашиваю - на хрена? Моя программа с текстовыми файлами не работает.
Причём здесь твоя программа. Я это больше для себя писал. Не нужен *.DXF поставь nil.
Цитата:
8.
Код:
(setq Count (1+ Count))
Обрабатывать коллекцию itmCol счетчиком есть, на мой взгляд, дурной тон. Чем вам vlax-for не угодило?
Хе, хе... А ты попробуй обработать коллекцию не Автокадовских Объектов vlax-for. Доложи о результатах. Или сразу догадаешься?

Так что в доработке возможно и нуждается и я знаю в каких, но не по данным пунктам.
{Smirnoff} вне форума  
 
Непрочитано 02.11.2005, 11:01
#25
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
{Smirnoff}: А кнопочку Cancel в окне выбора директории жать не пробывали?
Ох, кум, умеешь ты уговорить! (С)
Цитата:
В данном случае это свойство 'Path объекта типа FolderItem. Данный объект не Автокадовский и данное его свойство возвращает именно полный путь.
Не знаю, не знаю. :? У меня itm случился быть bak-файлом, так вернулось его полное имя.
Цитата:
Причём здесь твоя программа. Я это больше для себя писал. Не нужен *.DXF поставь nil.
Тема у нас какая? Поиск файлов с 3D- примитивами. Для этого я помощи страждущему Danilin'у прогу и наваял. Про "Мамаша, не отвлекайтесь!" слышать не приходилось?
Цитата:
А ты попробуй обработать коллекцию не Автокадовских Объектов vlax-for. Доложи о результатах.
Гы-ы-ы, действительно, не хвурываект! :? Ну, и неча здеся интеллект свой показывать! Мы тута люди простые, все более по делу чертильному... А то приходют всякие и умствують.
Лентяй вне форума  
 
Непрочитано 02.11.2005, 11:58
#26
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Лентяй

Ну можно ещё чуть чуть поумничать :?:
Цитата:
Не знаю, не знаю. У меня itm случился быть bak-файлом, так вернулось его полное имя.
Вот все свойства и методы объекта Folder Item приложения Shell Apllication: http://msdn.microsoft.com/library/de...folderitem.asp

Так, для справки если будешь копаться...
{Smirnoff} вне форума  
 
Непрочитано 03.11.2005, 09:06
#27
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


За сылку - спасибо. Что же касается команы vla-get-Path, то
Цитата:
Я, любимый:Код: (vla-get-Path itm) возвращает полное имя файла, а не путь.

{Smirnoff}: Данный объект не Автокадовский и данное его свойство возвращает именно полный путь.
По ссылке же читаем: "Path - Contains the item's full path and name". Так о чем спор, спрашивается?
Лентяй вне форума  
 
Непрочитано 03.11.2005, 09:25
#28
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Лентяй
Цитата:
Так о чем спор, спрашивается?
Это я в запарке не понял сути. Так что не о чём
{Smirnoff} вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как выявить 3Д чертежи из тысяч штук?