この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

トリムコマンドのような手順で「点で部分削除」
お世話になります。

トリムコマンドのような手順にて、線分やポリラインを「点で部分削除」したいのですが、
それをautolispで可能にすることはできますでしょうか。

①線分やポリラインを1本または複数選択
②それに交わる線分やポリラインを1本または複数選択
③ ①と②の交点で、①にて選択した線を部分削除(分割して、それぞれ別オブジェクトとなる)
3枚目の画像で交点で切れて別オブジェクトとなった線が黄色でなくなっていますが、
切断していることを示すために色を変更しているだけで、lispに色を変更する機能は必要ありません。
①と②の手順でオブジェクトを選択する際は、オブジェクトへの直接のクリックだけではなく交差選択・窓選択が使用できると幸いです。

Autocad2023を使用しています。
どうぞ宜しくお願いします。
  • タイ
  • 2023/11/08 (Wed) 15:43:05
Re: トリムコマンドのような手順で「点で部分削除」
こんな感じでどうでしょう?
コマンド名はcls
2個のオブジェクトの交点リストの作成には、下記にあるLispを使用しました。
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lsp-intersection-line-pline/td-p/5653563


--------------------------------------------------------
;切断基準と切断するオブジェクトそれぞれを選択し、切断
(defun c:cls (/ ss1 ss2 j k ptlst pt #osmode)
(prompt "\n切断基準となる線orポリラインを選択:")
(setq ss1 (ssget '(( 0 . "LINE,LWPOLYLINE"))))
(prompt "\n切断する線orポリラインを選択:")
(setq ss2 (ssget '(( 0 . "LINE,LWPOLYLINE"))))

(setq ptlst nil)
(setq j 0 k 0)

(repeat (sslength ss1)
(repeat (sslength ss2)
(setq ptlst (append (In2ob (ssname ss1 j) (ssname ss2 k)) ptlst))
(setq k (1+ k))
)
(setq j (1+ j))
(setq k 0)
)

(setq #osmode (getvar "osmode"))
(command-s "osmode" "0")
(command-s "IsolateObjects" "p" "")

(repeat (/ (length ptlst) 3)
(setq pt (list (car ptlst)
(cadr ptlst)
(caddr ptlst)))
(command "break" pt "f" pt pt)
(setq ptlst (cdddr ptlst))
)

(command-s "UnIsolateObjects")
(command-s "osmode" #osmode)
(princ)

)

;2個のオブジェクトの交点リストを返す
(defun In2ob (en1 en2 / flg ptsa)
(vl-load-com)
(setq int (vLa-intersectwith (vLax-ename->vLa-Object en1)
(vLax-ename->vLa-Object en2)
acextendnone))
(setq flg (vlax-safearray-get-u-bound (vlax-variant-value int) 1))

(if (= flg -1)
(setq ptsa nil)
(setq ptsa (vLax-safearray->List (vLax-variant-vaLue int)))
)
)
  • LUNE
  • 2023/11/09 (Thu) 12:03:38
Re: トリムコマンドのような手順で「点で部分削除」
想定通りに動きました!
ありがとうございました。
  • タイ
  • 2023/11/10 (Fri) 09:08:00

返信フォーム






プレビュー (投稿前に内容を確認)