Импорт информации из TLB vlax-Import-Type-Library и создание объекта(помогите)
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Импорт информации из TLB vlax-Import-Type-Library и создание объекта(помогите)

Импорт информации из TLB vlax-Import-Type-Library и создание объекта(помогите)

Ответ
Поиск в этой теме
Непрочитано 25.12.2013, 22:14 #1
Импорт информации из TLB vlax-Import-Type-Library и создание объекта(помогите)
alex-63
 
инженер
 
Брест
Регистрация: 15.09.2009
Сообщений: 55

Всем привет, помогите пожалуйста советом.

В общих словах необходимо модель из AutoCAD передать в Robot.
Простые примитивы Line передаются без проблем.
Для сложных объектов LwPoliline необходимо создать объект RobotPointsArray.
На VB создание объекта выгладит так Dim pts As New RobotPointsArray.
Как выполнить эту инструкцию в AutoLispe ?
Файл “robotom.tlb” импортирую функцией vlax-Import-Type-Library. А как создать объект RobotPointsArray?
Код:
[Выделить все]
 
(vl-load-com)
;;;***************************************
;;; Как создать объект  (Dim pts As New RobotPointsArray) ???
;;;****************************************
(defun rbCreateArr(rb  / obj)
(if (null
      ;(setq obj  (vlax-get-or-create-object "IRobotPointsArray"))
      (setq ac (VLAX-GET-ACAD-OBJECT))
      (setq obj  (vla-getInterfaceObject ac  "RobotPointsArray"))
      )
   (progn
     (alert "\nRobotPointsArray не создан")
     (exit)
     )
  
  obj  
  )  
  )
    
(defun RobotSetConnect ( / obj)
(if (null (setq obj  (vlax-get-or-create-object "Robot.Application")))
   (progn
     (alert "\nRobot не запускается")
     (exit)
     )  
  obj  
  )  
  )
;;;
(defun RobotDisconnect (obj / )
 (vlax-invoke-method obj "Quit")
 (vlax-release-object obj)
)


(defun c:acadToRobot ( / e obj eNr lstPt n n_s n_e X Y Z RbObjPrj  rbView rbStru rbNodes rbBars  ss)
   (setq rb (RobotSetConnect))
  (if rb (progn
       (setq RbObjPrj (vlax-get-property rb 'Project))
       
       (setq rbView  (vlax-get-property  RbObjPrj   'ViewMngr))       
       (setq rbStru  (vlax-get-property RbObjPrj  'Structure))
       
       (setq rbNodes (vlax-get-property  rbStru 'Nodes))
        (setq rbBars (vlax-get-property  rbStru 'Bars))
        (setq rbObj  (vlax-get-property  rbStru 'Objects))
        (setq rbPointsArray (rbCreateArr rb))
       
        
       )
    )
; (setq robot  (vlax-get-or-create-object "robotom.tlb"))
(setq file (strcat (getenv "systemdrive")   "\\Program Files\\Autodesk\\Autodesk Robot Structural Analysis Professional 2014\\System\\Exe\\robotom.tlb"))
  (if (null rm-Close)
  (vlax-Import-Type-Library :tlb-filename file :methods-prefix    "rm-" :properties-prefix "rp-" :constants-prefix   "rc-"))
  
  (setq ss (ssget))  
  (setq eNr 1) ;  номер КЭ
  (while (and ss (not (zerop (sslength ss))))
    (setq e (ssname ss 0))
    (ssdel e ss)    
    (setq obj (vlax-ename->vla-object e))
    (setq nameObj (vlax-get-property obj 'ObjectName))
    (cond ((eq nameObj "AcDbLine")
    (setq pts (vlax-safearray->list (vlax-variant-value(vlax-get-property obj 'StartPoint))))
     (if (not (member pts lstPt)) (progn ;  добавляем точку
     (setq lstPt (reverse (cons pts (reverse lstPt))))
     (setq n  (getIndex pts lstPt))
     (setq X (vlax-make-variant   (* (car pts) 0.001) vlax-vbDouble))
    (setq Y (vlax-make-variant   (* (cadr pts) 0.001) vlax-vbDouble ))
    (setq Z  (vlax-make-variant  (* (caddr pts) 0.001) vlax-vbDouble ))
    (setq n_s (vlax-make-variant n  vlax-vbLong))    
    ;(setq nod1 (rm-addNode  rb n   X Y Z))     
    (setq nod1 (vlax-invoke-method rbNodes  'Create  n_s X Y Z))
     ); else
       (progn
       (setq n_s (vlax-make-variant (getIndex pts lstPt)  vlax-vbLong))
       )
       );if
   
    (setq pte (vlax-safearray->list (vlax-variant-value(vlax-get-property obj 'EndPoint)))) 
    (if (not (member pte lstPt)) (progn ;  добавляем точку
				  (setq lstPt (reverse (cons pte (reverse lstPt))))
                                  (setq n (getIndex pte lstPt))				  
    (setq X (vlax-make-variant   (* (car pte) 0.001) vlax-vbDouble))
    (setq Y (vlax-make-variant   (* (cadr pte) 0.001) vlax-vbDouble ))
    (setq Z  (vlax-make-variant  (* (caddr pte) 0.001) vlax-vbDouble ))
    (setq n_e (vlax-make-variant n  vlax-vbLong))
    (setq nod2 (vlax-invoke-method rbNodes  'Create  n_e  X Y Z)))
      (progn
       (setq n_e (vlax-make-variant (getIndex pte lstPt)  vlax-vbLong))
       )
      );if
     ;; добавили стержень	   
    (vlax-invoke-method rbBars 'Create (vlax-make-variant eNr  vlax-vbLong)  n_s n_e)
	   );
 ((eq nameObj "AcDbPolyline")  
  ;(setq coord (make-list obj 2))
   (setq coord (LWPolyVertices e))
  ;(setq objPline (vlax-invoke-method rbObj 'Create (vlax-make-variant 1 vlax-vbInteger)))
  ;(setq objPline (vlax-invoke-method 'CreateContour  (vlax-make-variant (length coord) vlax-vbLong)   
  ;(rm-RobotGeoSegmentLine  
  )	   
	  (t nil))    
     (setq eNr (1+ eNr))            
     (vlax-release-object obj)
    );while
    (vlax-invoke-method rbView 'Refresh)  
  (PRINC)
  )
Просмотров: 3151
 
Автор темы   Непрочитано 27.12.2013, 23:08
#2
alex-63

инженер
 
Регистрация: 15.09.2009
Брест
Сообщений: 55


Создается объект PointsArray (setq PtArrobj (vlax-get-or-create-object "Robot.PointsArray")) как это я сразу не догадался ?. Стержни в AutoCAde моделирую примитивами Line, плиту и стены думаю моделировать polyline. Начал изучать Робот и не могу понять почему в Lire импорт схемы из AutoCAD есть(через DXF) а в Robote только через подложку приходиться обводить примитивы это неудобно. Неужели никто не написал plugins?
alex-63 вне форума  
 
Непрочитано 27.12.2013, 23:29
#3
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Тебе и флаг в руки
По коду: не лучше ли
(vla-get-Path (vlax-get-acad-object))
вместо
(strcat (getenv "systemdrive") "\\Program Files\\Autodesk\\Autodesk Robot Structural Analysis Professional 2014...
gomer вне форума  
 
Автор темы   Непрочитано 30.12.2013, 21:12
#4
alex-63

инженер
 
Регистрация: 15.09.2009
Брест
Сообщений: 55


Нет. (vla-get-Path (vlax-get-acad-object)) -> это доступ к AutoCAd серверу .
А мне надо Robot. И импортируя RobotOM.tlb я так и не добрался до Robot.PointsArray попытка почему то неудачная.
Хотя если посмотреть в нем как бы присутствует
IRobotPointsArray = interface(IDispatch)
['{ED408960-197C-4ED7-AFE1-63C7A833525C}']
function Get_Count: Integer; safecall;
procedure SetSize (_size: Integer); safecall;
procedure Set_ (_idx: Integer; _x: Double;
_y: Double; _z: Double); safecall;
procedure Get (_idx: Integer; out _x: Double;
out _y: Double; out _z: Double); safecall;
property Count: Integer read Get_Count;
end;
не совсем понимаю подгружается ли RobotOM.dll или используется Robot.exe(сервер)?
Скорее всего :
(vlax-get-or-create-object "Robot.Application") -> Robot.exe
(vlax-get-or-create-object "Robot.PointsArray") -> RobotOM.dll .
Может ошибаюсь. Но почему нет доступа в autolisp к Robot.PointsArray через vlax-Import-Type-Library ?
Но используя (vlax-get-or-create-object "Robot.PointsArray")
я добился цели не совсем разобравшись в механизме.
alex-63 вне форума  
 
Непрочитано 30.12.2013, 22:05
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от alex-63 Посмотреть сообщение
Нет. (vla-get-Path (vlax-get-acad-object)) -> это доступ к AutoCAd серверу .
Да, действительно, не подумал.
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Импорт информации из TLB vlax-Import-Type-Library и создание объекта(помогите)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCAD 2012 zenon AutoCAD 168 08.04.2013 16:01