1

現在、別のポリラインに沿って走る 2 つのブロック (first_block、second_block) の間でポリラインを実行しようとしています。アクションの最後に、開始ブロックと終了ブロックの詳細を注釈ブロック (cable_name_tag) に入力する挿入関数が呼び出されます。 .

このポリラインは他のブロックを横断し、多くの場合、下にあるポリライン (cable_ducting) と並行して実行する必要があるため、スペースが限られている場合があるため、注釈をドロップするポリラインの適切な部分を選択するオプションが必要になります。

second_block をコメントアウトして、ハードコードされた値を指定すると、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))

私はこの問題で立ち往生しており、誰かが提供できる助け、アドバイス、または指針をいただければ幸いです。

ありがとうございました。

4

1 に答える 1

1

(entlast)作成したばかりのエンティティを取得するために使用しないのはなぜですか?

于 2012-09-21T01:35:43.980 に答える