• 締切済み

AUTOCADで両側オフセットについて

AUTOCAD 2015を使用しています。 あるホームページにあるLISP文を見つけたのですが、両側オフセットした結果のオブジェクトの 画層が元のオブジェクトと同じになるのですが、現在の画層にできないでしょうか? LISP文は ;両側オフセット (defun C:wofset (/ end)   (command "offsetdist" pause)   (setq end 1)   (while (/= nil end)     (command "offset" "" pause)     (if (< 0 (getvar "cmdactive"))       (command "@" "" "offset" (* 2 (getvar "offsetdist")) (entlast) "@" "" "offsetdist" (/ (getvar "offsetdist") 2))       (setq end nil)     )   )   (princ) ) です。 どうぞ宜しくご教授お願いいたします。

みんなの回答

  • moon00
  • ベストアンサー率44% (315/712)
回答No.1

(defun C:wofset (/ end)   (command "offsetdist" pause)   (setq end 1)   (while (/= nil end)     (command "offset" "" pause)     (if (< 0 (getvar "cmdactive"))       (command "@" "" "change" "l" "" "P" "LA" (getvar "CLAYER") "" "offset" (* 2 (getvar "offsetdist")) (entlast) "@" "" "change" "l" "" "P" "LA" (getvar "CLAYER") "" "offsetdist" (/ (getvar "offsetdist") 2))       (setq end nil)     )   )   (princ) ) それぞれオフセットした後に、changeで現在層に変更しています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • AUTOCADで両側オフセットについて

    AUTOCAD2015を使用しています。 前回回答いただいたのですが、結果がByLayerに従わなかった為 元要素と同じ色になってしまいました。 それと元々入力値が片側方向のオフセット値なので私の仕事では感違いの元です。 結果を現画層にしたがわせ、入力値が両側にオフセットした結果にする様にしたいのですが ご教授お願い致します。 今のマクロ文は下記です。 ;両側オフセット (defun C:wofset (/ end)   (command "offsetdist" pause)   (setq end 1)   (while (/= nil end)     (command "offset" "" pause)     (if (< 0 (getvar "cmdactive"))       (command "@" "" "change" "l" "" "P" "LA" (getvar "CLAYER") "" "offset" (* 2 (getvar "offsetdist")) (entlast) "@" "" "change" "l" "" "P" "LA" (getvar "CLAYER") "" "offsetdist" (/ (getvar "offsetdist") 2))       (setq end nil)     )   )   (princ) ) どうぞ宜しくお願い致します。

  • AUTOCAD オフセットの設定

    AUTOCADでオフセットの設定を知らない間に「現在の設定: 元のオブジェクトを消去=はい 画層=元のオブジェクト OFFSETGAPTYPE=0」にしてしまいました。初期設定の「元のオブジェクトを消去=いいえ」に戻すにはどうしたらよいのでしょうか? どなたかお教え願います。

  • AUTOCAD_2006

    AUTOCAD2006ですが、画層の削除をしようとしたとき画層には何も描画されてないのに状態ではオブジェクトがあるマークになっている。けど何のデータが残っているのか探しようも無いのです。どうしたら削除でしるでしょうか。 あと無粋な質問ですが、auto_cadは皆さん使いやすいのでしょうか? 長所短所何でもいいですご意見を聞かせてください。 ちなみに自分は作成者に対して不親切な感じがしますし、外部に依存するプログラムが多すぎて(LISPだったかな)ファイルの共有や他者(他社)とのデータやり取りという実情に沿った開発がされて無いように思えます。

  • lispのwhile

    lispの特殊形式whileを以下のように定義します。 (while 判定条件 本体…) 第一引数である判定条件を評価し真ならば本体を評価しもういちど判定条件を評価、偽ならば本体を評価しない。 この時次のコードでよくわからない部分があります (defmacro image (var list &rest forms) `(let (($list$ ,list) ($r$ nil) (,var nil) ) (while ($list$ (nreverse $r$)) (setq ,var (pop $list$)) (push (progn ,@forms) r) ))) ($list$ (nreverse $r$)) この文は 偽(つまりnil) になりえるのですか? $list$はpopを繰り返すのでループを繰り返せばnilになるでしょう。 しかし (nreverse $r$) はpushを繰り返すのでnilにはなりえないと思います。 また、もしnilになりえたとしても (while (nil nil)) は (while (nil)) と同値なのでしょうか? ちなみにこれはlispの参考書のコードそのままです。 読み進めていくうちにだんだん難しくなってきました。 もうどれだけ考えてもわからないので、気持ち悪い思いはしながらもどんどん先に進んでいます。 こんな勉強法でいいんでしょうか? 不安になります。

  • AUTO CADの文字の180度、、、

    こないだの質問に対して リスプ 作ったのですが、、、質問が 締め切りになってたので、、、 これだと 回転したい文字 たくさん選んでも 回転できます、、、線分とか 他の図形も 入っても 大丈夫なはずです、、、寸法線とかの文字は 回転してくれません、、、 うちのpcの調子が 悪くて 掲載出来なかったのですが、、、 ああ~~気が付いて くれるといいけどなあ~~ (defun c:t180() (setvar "cmdecho" 0) (setq os (getvar "osmode")) (setvar "mirrtext" 0) (setvar "osmode" 0) (setq e1 (ssget )) (setq ss (sslength e1)) (setq loop 0) (while (< loop ss) (setq b (ssname e1 loop)) (setq et1 (entget b)) (setq txt (cdr (assoc 0 et1))) (setq s1 (cdr (assoc 10 et1))) (setq t1 (cdr (assoc 40 et1))) (setq r1 (cdr (assoc 50 et1))) (if (= "TEXT" txt) (progn (setq r2 (+ r1 (* pi 0.5))) (setq r3 (- r1 pi)) (setq k1 (polar s1 r2 t1 )) (setq rt1 (angtos r1 0 4)) (setq rt2 (angtos r3 0 4)) (command "rotate" b "" s1 "r" rt1 rt2 ) (command "move" b "" s1 k1) (command "mirror" b "" s1 k1 "y") ) ) (setq loop (+ loop 1)) ) (setvar "osmode" os) (setvar "cmdecho" 1) (prin1) )

  • xyzzyの実用サンプル

    LISPを覚えるために、xyzzyを使うことに決めました。 手始めに便利な機能が設定できれば励みになるかと思い、いきなり敷居が高いですが、次の内容がしたいのです。 F1を押すと、xyzzyの下の欄でurlを打つと、エディタ部にヘッダーを含めたHTMLテキストが表示される (defun poor-http (host file) (interactive) (let ((st (connect host 80)) form) (write (concat "GET " file " HTTP/1.0\r\n\r\n") :stream st) (terpri st) (while (setq form (read st nil '#1=:eof)) (when (eq form #1#) (return)) (insert form)))) (poor-http '203.216.243.218' "/index.htm" ) ctrl+jと実行すると、関数がありませんとなります。 途中で挫折しましたが、これらの機能を満たす gethttpsrc.lを作成する方法が知りたいです。 今のところの知識は nil t が真偽値で()でS式を作成する、まではわかりました。(あっているのだろうか?)

  • (AcadLisp/VBA) 事前選択して処理

    AutoCAD2004のVBAマクロで、"あらかじめ選択したオブジェクト"を処理する方法を探しています。 選択中のオブジェクト情報は、PickFirstSelectionSetで取得可能なのは分かりました。ただ、ボタンにマクロを登録しようと思うと、vbarunコマンドの実行で選択解除されてしまい、役に立ちません。。。  '例) -vbarun "module1.myfunc"  sub myfunc   msgbox ActiveDocument.PickFirstSelectionSet.Count  End sub 選択解除せず実行する方法(VBE上でF5以外に)や、その他なにか・・・ Lisp側で選択図形の情報を取ってVBAに渡す手もありっぽいですが、Lispよく知らないのでうまく動かず試行錯誤中。ssgetは表示範囲のみらしいのが課題になりそうだと分かり、心折れかけてます。 何かご存知でしたら教えていただけないでしょうか;

  • pascal二分木の課題

    レポート課題で、pascalの二分木についての問題が出たのですが、うまくソースコードを作ることができません! 誰かお手伝いよろしくお願いします! 課題:progに木をバランスよく組みなおす関数repackを追加せよ program prog(input,output); const maxRange = 100; type dataType = integer; tree = ^treeCall; treeCall = record data:dataType; left,right:tree end; var root:tree; command:char; value:dataType; function search(d:dataType; t:tree):tree; begin if t=nil then search:=nil(*ブレーク*) else if t^.data=d then search:=t(*見つけた*) else if t^.data>d then search:=search(d,t^.left)(*左を検索*) else search:=search(d,t^.right)(*右を検索*) end; procedure insert(d:dataType; var t:tree); begin (**) if t=nil then begin new(t); t^.data:=d; t^.left:=nil; t^.right:=nil end else if t^.data=d then (*すでに登録されているので何もしない*) else if t^.data>d then insert(d,t^.left) else insert(d,t^.right); end; procedure delete(d:dataType; var t:tree); var temp:tree; procedure deleteMin(var r:tree); var temp:tree; begin temp:=r; while temp^.left<>nil do temp:=temp^.left; t^.data:=temp^.data; delete(temp^.data,r) end; begin if t=nil then writeln('Not Exist.') else if t^.data=d then if (t^.left<>nil) and (t^.right<>nil) then deleteMin(t^.right) else begin temp:=t; if t^.left<>nil then t:=t^.left else t:=t^.right; dispose(temp); end else if t^.data>d then delete(d,t^.left) else delete(d,t^.right) end; procedure writeSet(t:tree); begin if t=nil then (*何もしない*) else begin writeSet(t^.left);(*左へ左へ・・・*) write(t^.data:1,' '); writeSet(t^.right)(*右へ・・・*) end end; (****** Body ******) begin root:=nil; repeat write('> '); read(command); if command in ['i','d','s','w'] then begin (*もしもコマンドがw以外なら値を読み込む*) if command='w' then readln else readln(value); case command of (*数値をバイナリーツリーに挿入 ここでソーティングしたい*) 'i': insert(value,root); 'd': delete(value,root);

  • AutoCADのオフセット

    AutoCAD2000iです。他の作業は出来るのですが、オフセットのみできません。線種が非表示になっているわけでも、ロックされているわけでもありません。新しく書いた線も、オフセットのみ出来ません。困っています。 よろしくお願いいたします。

  • AUTOCAD2004オフセットについて・・・

    AUTOCAD2004ですが、オフセットしたとき、現在指定している画像でオフセットが出来ません・・・ (元の画像がそのままオフセットされてしまいます) 今までAUTOCAD2006を使っていて、その時は オフセット→右クリック→現在の画像で設定出来ていたのですが、 2004ではそのような機能は無いのでしょうか・・・ 困っています。教えて下さい~