parent
3627132664
commit
c56aca0932
@ -1,61 +1,31 @@
|
||||
#lang racket
|
||||
(require ffi/com)
|
||||
|
||||
(define acad-prog-id (make-parameter "AutoCAD.Application"))
|
||||
(define (get-active-acad) (wrap-com-obj (com-get-active-object (acad-prog-id))))
|
||||
(define (make-acad) (wrap-com-obj (com-create-instance (acad-prog-id))))
|
||||
|
||||
(define (gather-members com-obj)
|
||||
(apply values (map (lambda(get-func) (map string-downcase (get-func com-obj)))
|
||||
(list com-get-properties com-set-properties com-methods))))
|
||||
|
||||
(define com-obj-prefix (make-parameter "acad"))
|
||||
|
||||
(define (wrap-com-obj com-obj)
|
||||
(read-case-sensitive #f)
|
||||
(let-values ([(get-props set-props methods) (gather-members com-obj)])
|
||||
(let ([print-repr (format "#<~A/~A:~A>"
|
||||
(com-obj-prefix)
|
||||
(com-object-type com-obj)
|
||||
(com-get-property com-obj
|
||||
(cond
|
||||
[(member "name" get-props) "name"]
|
||||
[(member "objectid" get-props) "objectid"]
|
||||
[else ""])))])
|
||||
(lambda (msg . args)
|
||||
(let* ([msg (symbol->string msg)]
|
||||
[result
|
||||
(case msg
|
||||
[("com-obj") com-obj]
|
||||
[("get-props") get-props]
|
||||
[("set-props") set-props]
|
||||
[("methods") methods]
|
||||
[("print-repr") print-repr]
|
||||
[else
|
||||
(cond
|
||||
[(and (member msg set-props)
|
||||
(equal? (length args) 1))
|
||||
(com-set-property! com-obj msg (first args))]
|
||||
[(member msg get-props) (com-get-property com-obj msg)]
|
||||
[(member msg methods) (apply com-invoke com-obj msg args)])])])
|
||||
(if (and (com-object? result)
|
||||
(not (eq? result com-obj)))
|
||||
(wrap-com-obj result)
|
||||
result))))))
|
||||
|
||||
(define (wrapped-com-obj? x)
|
||||
(with-handlers ([exn? (lambda(_) #f)])
|
||||
(com-object? (x 'com-obj))))
|
||||
|
||||
(define acad (get-active-acad))
|
||||
(define doc (acad 'activedocument))
|
||||
(define modelspace (doc 'modelspace))
|
||||
;(define util (com-get-property doc "Utility"))
|
||||
;(define c (com-invoke modelspace "AddCircle" #{0.0 0.0 0.0} 1.0))
|
||||
;(define ss-coll (com-get-property doc "SelectionSets"))
|
||||
;
|
||||
;(define (ss-get-or-create name)
|
||||
; (with-handlers ([exn? (lambda(_) (com-invoke ss-coll "Add" name))])
|
||||
; (com-invoke ss-coll "Item" name)))
|
||||
;
|
||||
;(define ss (ss-get-or-create "jimbo"))
|
||||
(require "com.rkt")
|
||||
|
||||
(com-obj-prefix "acad")
|
||||
(com-progid "AutoCAD.Application")
|
||||
(define current-acad (make-parameter (void)))
|
||||
(define current-doc (make-parameter (void)))
|
||||
(define current-container (make-parameter (void)))
|
||||
;; (current-acad (get-active-wco))
|
||||
;; (current-doc (acad 'activedocument))
|
||||
;; (current-container (acad 'modelspace))
|
||||
;; (define ms ((current-doc) 'modelspace))
|
||||
;; (define u ((current-doc) 'utility))
|
||||
;; (define c (circle #{0.0 0.0 0.0} 1.0))
|
||||
;; (define ss-coll ((current-doc) 'selectionsets))
|
||||
|
||||
;; (define (ss-get-or-create name)
|
||||
;; (with-handlers ([exn? (lambda(_) (ss-coll 'add name))])
|
||||
;; (ss-coll 'item name)))
|
||||
|
||||
;; (define ss (ss-get-or-create "stairs"))
|
||||
|
||||
(define (make-bg-acad-server) nil)
|
||||
|
||||
(define (call-with-readonly-dwg template filename proc)
|
||||
nil)
|
||||
|
||||
(define (take-off-dwgs . filenames)
|
||||
(current-acad (create-wco)))
|
||||
|
||||
|
||||
|
@ -0,0 +1,57 @@
|
||||
#lang racket
|
||||
(require ffi/com)
|
||||
|
||||
(provide (create-wrapped-instance get-active-wrapped-com-obj))
|
||||
|
||||
(define com-obj-prefix (make-parameter "COM"))
|
||||
(define com-progid (make-parameter (void>)))
|
||||
|
||||
(define (create-wco)
|
||||
(wrap-com-obj (com-create-instance (com-progid))))
|
||||
|
||||
(define (get-active-wco)
|
||||
(wrap-com-obj (com-get-active-obj (com-progid))))
|
||||
|
||||
(define (wrapped-com-obj? x)
|
||||
(with-handlers ([exn? (lambda(_) #f)])
|
||||
(com-object? (x 'com-obj))))
|
||||
|
||||
(define (wrap-com-obj com-obj)
|
||||
(read-case-sensitive #f)
|
||||
(let-values ([(get-props set-props methods) (gather-members com-obj)])
|
||||
(let ([print-repr
|
||||
(format
|
||||
"#<~A/~A:~A>"
|
||||
(com-obj-prefix)
|
||||
(com-object-type com-obj)
|
||||
(com-get-property
|
||||
com-obj
|
||||
(cond
|
||||
[(member "name" get-props) "name"]
|
||||
[(member "objectid" get-props) "objectid"]
|
||||
[else ""])))])
|
||||
(lambda (msg . args)
|
||||
(let* ([msg (symbol->string msg)]
|
||||
[result
|
||||
(case msg
|
||||
[("com-obj") com-obj]
|
||||
[("get-props") get-props]
|
||||
[("set-props") set-props]
|
||||
[("methods") methods]
|
||||
[("print-repr") print-repr]
|
||||
[else
|
||||
(cond
|
||||
[(and (member msg set-props)
|
||||
(equal? (length args) 1))
|
||||
(com-set-property! com-obj msg (first args))]
|
||||
[(member msg get-props) (com-get-property com-obj msg)]
|
||||
[(member msg methods)
|
||||
(apply com-invoke com-obj msg args)])])])
|
||||
(if (and (com-object? result)
|
||||
(not (eq? result com-obj)))
|
||||
(wrap-com-obj result)
|
||||
result))))))
|
||||
|
||||
(define (gather-members com-obj)
|
||||
(apply values (map (lambda(get-func) (map string-downcase (get-func com-obj)))
|
||||
(list com-get-properties com-set-properties com-methods))))
|
@ -1,2 +1,12 @@
|
||||
(defun send-sexp (namespace sexp)
|
||||
(startapp (findfile "tcpsend.exe") (escape-quotes (strcat namespace " " (to-string sexp)))))
|
||||
(startapp (findfile "tcpsend.exe")
|
||||
(escape-quotes (strcat namespace " " (to-string sexp)))))
|
||||
|
||||
(defun data-elt->hash-repr (data-elt)
|
||||
(strcat "(" (to-string (car data-elt)) " . " (to-string (cadr data-elt)) ")"))
|
||||
|
||||
(defun data->hash-repr (data)
|
||||
(strcat "#hash(" (apply 'strcat (mapcar 'data-elt->hash-repr data)) ")"))
|
||||
|
||||
(defun bg-fabdata-export (filenames)
|
||||
(send-sexp (cons 'take-off-dwgs (get-files-this-dir T))))
|
||||
|
Loading…
Reference in new issue