2012-09-20 41 views
1

현재 다른 폴리 라인을 따라 실행되는 두 블록 (first_block, second_block) 사이에서 폴리 라인을 실행하려고 시도 중입니다. 삽입 기능의 동작이 끝날 때 called는 주석 블록 (cable_name_tag)에 시작 및 끝 블록의 세부 정보를 채 웁니다.폴리 라인 선택시 Autocad 오류 "잘못된 인수 유형 : lselsetp nil"

이 폴리 라인은 다른 블록을 가로 지르고 기본 폴리 라인 (cable_ducting)이있는 평행선으로 실행해야하는 경우가 있으므로 공간이 제한적일 수 있으므로 주석을 삭제하기 위해 폴리선의 해당 부분을 선택하는 옵션이 필요합니다.

내가 second_block을 주석 처리하고 harcoded 값을 제공하면 ssget 함수가 문제없이 작동하므로, 해당 코드에서 first_block 및 second_block의 구문이나 처리에 문제가있는 것이 합리적이라고 확신합니다.

(defun c:cable() 
    (vl-load-com) 
    (setvar "clayer" "cable layer") 
    (setvar "celtype" "bylayer") 
    (setvar "osmode" 515) 
    (command "_.pline" 
      (getpoint)) 
    (while (> (getvar ' cmdactive) 0) 
    (command pause) 
    (princ "\npress enter to finish:")) 
    (setq elst 
     (entsel "\nselect cable segment: ")) 
    (setq ename 
     (car elst)) 
    (setq pt 
     (cadr elst)) 
    (setq annopt pt) 
    (setq pt 
     (vlax-curve-getclosestpointto ename pt)) 
    (setq param 
     (vlax-curve-getparamatpoint ename pt)) 
    (setq preparam 
     (fix param)) 
    (setq postparam 
     (1+ preparam)) 
    (list (setq pt1 
       (vlax-curve-getpointatparam ename preparam)) 
     (setq pt2 
       (vlax-curve-getpointatparam ename postparam))) 
    (setq cable 
     (entlast)) 
    (setq cable_start 
     (vlax-curve-getstartparam cable)) 
    (setq cable_start_point 
     (vlax-curve-getstartpoint cable)) 
    (setq cable_end_point 
     (vlax-curve-getendpoint cable)) 
    (setq cable_end 
     (angtos (angle '(0 0) 
         (vlax-curve-getfirstderiv cable 0.0)))) 
    (setq first_block 
     (ssget "_c" cable_start_point cable_end_point 
       (list (cons 0 "insert") 
        (cons 2 "first_block")))) 
    (setq second_block 
     (ssget "_c" cable_start_point cable_end_point 
       (list (cons 0 "insert") 
        (cons 2 "second_block")))) 
    (setq end_cable 
     (ssname second_block 0)) 
    (setq start_cable 
     (ssname first_block 0)) 
    (setq $end_cable 
     (vla-get-textstring 
     (cadr (vlax-safearray->list 
       (variant-value 
       (vla-getattributes 
        (vlax-ename->vla-object end_cable))))))) 
    (setq $start_cable 
     (vla-get-textstring 
     (cadr (vlax-safearray->list 
       (variant-value 
       (vla-getattributes 
        (vlax-ename->vla-object start_cable))))))) 
    (setq cable_name 
     (vlax-curve-getendparam cable)) 
    (command ; insert cable param 
      "-insert" 
      "cable_name_tag" 
      annopt 
      "1" 
      "1" 
      cable_angle 
      cable_name 
      $start_cable 
      $end_cable 
      "144" 
      cable_length)) 

나는이 코너에 머물렀다. 누구든지 제공 할 수있는 도움, 조언 또는 조언을 주시면 감사하겠습니다.

감사합니다.

답변

1

방금 ​​만든 엔티티를 얻으려면 (entlast)을 사용하지 않는 것이 어떻습니까?