2017-01-29 6 views
0

Я пытаюсь преобразовать несколько объектов в VLA-OBJECTS в prder, чтобы использовать доступные им функции Vlisp. То, что я пытаюсь сделать, это:convert vlax-ename-> vla-object нескольких объектов

(while (<= masa masas) 
    (set (read (strcat "off" (itoa masa))) (cdr (assoc -1 (eval (read (strcat "offset" (itoa masa))))))) 
    (set (read (strcat "obj" (itoa masa))) (vlax-ename->vla-object (read (strcat "off" (itoa masa))))) 
    (setq masa (+ masa 1)) 
) 

где маса счетчик, который позволяет выйти из цикла в то время как и masas переменная предела. в wy-коде первая и третья строки внутри цикла while работают отлично, а вторая, где я пытаюсь преобразовать каждый ename в объект VLA, дает мне ошибку неправильный тип аргумента: lentityp OFF1, потому что в этом случае начало запускается в 1, я думаю, что проблема заключается не в прописном результате чтения, потому что lisp не чувствителен к регистру, а скорее является проблемой типа, которую я не могу решить. Я также пробовал с помощью eval или с использованием прямого отношения -1, но мне не повезло.

ответ

1

Сообщение об ошибке означает, что OFF1 не является ENAME (это символ). Вам нужно оценить значение символа с помощью (eval ...).

(while (<= masa masas) 
    (set (read (strcat "off" (itoa masa))) 
     (cdr (assoc -1 (eval (read (strcat "offset" (itoa masa)))))) 
) 
    (set (read (strcat "obj" (itoa masa))) 
     (vlax-ename->vla-object (eval (read (strcat "off" (itoa masa))))) 
) 
    (setq masa (1+ masa)) 
) 

IMO, вы должны скорее использовать списки, а не назначать все эти добавочные переменные. Чтобы использовать эти переменные, вам нужно будет пройти через них с , а или повторите, как вы могли бы сделать со списком, и foreach. Предполагая offsetList - это список списков dxf (все ваши значения смещения (n)), вы можете просто создать список enameS и список vla-объектовS.

(setq offList (mapcar '(lambda (x) (cdr (assoc -1 x))) offsetList)) 
(setq objList (mapcar 'vlax-ename->vla-object offList))