• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

lispでビューポートを調整する

  • Thread starter Thread starter Cristallo
  • Start date Start date

Cristallo

Guest
私はいくつかのレイアウトを持っている図面に
リストを取得する (setq レイアウト (layoutlist)))
(setq レイアウト (acad_strlsort レイアウト))

その後、私はビューポート(私は各レイアウトのために1を持っている)の情報を取得しようとするごとに - 私はレイアウト1002のビューポートを探しています
(cons 0 "viewport") (cons 410 "1002")))))
(setq view0 (entget (sname p 0))))))

私はその特定のレイアウトでビューポートのエンティティティリストを取得し、ビューの極端を把握しようとするが、私はできません。 グループ10はビューポートの中心ですが、角度(表示ボックス)が必要で、モデルのビューポートのエンティティティティを選択できるようにしています。
グルスは教えてもらえますか?
 
uno tra i metodi se ra è rettangolare :

selezionare ウィンドウ nel レイアウト
(setq の欠陥(vlax-ename->vla-object)))

trovare il バウンディング ボックス デラ 最高級 (p1 e p2)
(vla-getboundingbox flay 'p1* 'p2*')
(setq p1 (vlax-safearray->list p1*)))
(setq p2 (vlax-safearray->list p2*)))
(setq p1 (list (car p1) (cadr p1))))
(setq p2 (list (car p2) (cadr p2))))

trasforma le 座標 da レイアウト a modello
(setq p1 (trans p1 3 2)
(setq p2 (trans p2 3 2))
 
トピックス
(vlax-get-property vlaobj "center") ntto 中央
(vlax-get-property vlaobj "width") larghezza
(vlax-get-property vlaobj "height") altezza
 
または
ent がビューポートのエンティティティの一覧である場合
(cdr (assoc 10 ent) 中心ポイント
(cdr (assoc 40 ent)の幅
(cdr (assoc 41 ent) 高さ
 
ありがとうございます。
進捗状況についてお知らせします。
 
最初のテスト:
rporの方法を使って、腹、幅および高さを通して 私はgpのバウンディングボックスの同じ同一の座標に到着しますが、私はそこに着くために3-4ステップを行う必要がありますので、私はもっとすぐにgpのソリューションを好む。

私が見つけている大きな問題はトランスにあります
1) 現在の表示がレイアウト上にある場合にのみ値を返します。 モデルはニルを返します。
2) トランスからのポイントと、代わりに正しいポイントの間の翻訳があります。 境界ボックスの2つのポイントの間に線(モデル)を描画すると、ラインはウィンドウのサイズを完全にカバーするが、トットを翻訳するので、それは純粋な翻訳です。

私は2つのコデックス(gpソリューション - rporソリューション)の断片とdwgファイルの抽出物の両方を添付して、私は私の困難を検証することができます。
Code:
 (setqレイアウト(レイアウトリスト))
(setq レイアウト (acad_strlsort レイアウト)))
(setq アド (getvar "dwgprefix")))
(setq layfol (strcat 広告 "layouts")))
(vl-mkdir layfol)

(setqのレイアウト番号(長さのレイアウト)))
(setq カウント 0)
(setq レイアウト (nth 0 レイアウト)))
(setq vp (sget "x" (list (cons 0 "viewport")))))))))
;;;;;;*********inizio codice gp***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
(setq flay (vlax-ename->vla-object (ssname vp 0)))))))
(vla-getboundingbox flay 'p1* 'p2*)
(setq p1 (vlax-safearray->list p1*)))
(setq p2 (vlax-safearray->list p2*)))
(setq p3 (list (car p1) (cadr p1)))))
(setq p4 (list (car p2) (cadr p2)))))
(setq p5 (trans p3 3 2))
(setq p6 (trans p4 3 2))
;;;;;;;;;********* 良いコダイス gp*************
(setq oldosmode (getvar "osmode")))
(setvar「osmode」) 0)
(コマンド "_line" p5 p6 ")
Code:
;;********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
(setq centro (vlax-safearray->list (vlax-variant-value (vlax-get-property flay "center")))))))))
(setq larghezza (vlax-get-property flay "width")))
(setq altezza (vlax-get-property flay "height")))
(setq p01x (- (nth 0 centro) (/ larghezza) 2)))
(setq p01y (- (nth 1 centro) (/ altezza 2))))))
(setq p01 (list p01x p01y (nth 2セントロ))))))
;;;;****codice rpor*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
 

Attachments

Code:
 (setqレイアウト(レイアウトリスト))
(setq レイアウト (acad_strlsort レイアウト)))
(setq アド (getvar "dwgprefix")))
(setq layfol (strcat 広告 "layouts")))
(vl-mkdir layfol)

(setqのレイアウト番号(長さのレイアウト)))
(setq カウント 0)
(setq レイアウト (nth 0 レイアウト)))
(setq vp (sget "x" (list (cons 0 "viewport")))))))))
(setvar "clayout" レイアウト) ;<======== rendi corrente il レイアウト
;;;;;;*********inizio codice gp***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
(setq flay (vlax-ename->vla-object (ssname vp 0)))))))
(vla-getboundingbox flay 'p1* 'p2*)
(setq p1 (vlax-safearray->list p1*)))
(setq p2 (vlax-safearray->list p2*)))
(setq p3 (list (car p1) (cadr p1)))))
(setq p4 (list (car p2) (cadr p2)))))
(setq p5 (trans p3 3 2))
(setq p6 (trans p4 3 2))
;;;;;;;;;********* 良いコダイス gp*************
(setvar "clayout" "model") ;<==================================================================================================================================================================================================================================================
(setq oldosmode (getvar "osmode")))
(setvar「osmode」) 0)
(コマンド "_line" p5 p6 ")
 
Last edited by a moderator:
私が見つけている大きな問題はトランスにあります
1) 現在の表示がレイアウト上にある場合にのみ値を返します。 モデルはニルを返します。
コード3は、レイアウトにないと、座標を計算することはできません。
 
コード3は、レイアウトにないと、座標を計算することはできません。
私はこれを理解しましたが、私は紙の空間からトランスを作るとき、彼は正確なものではない値を返します。 950の翻訳ユニット(同一のポイント)があります。
厳密なギャップはこれです:
デルタX = 920.4609、デルタY = -258.0204、デルタz = 0.0000
 
Last edited:
厳密なギャップはこれです:
デルタX = 920.4609、デルタY = -258.0204、デルタz = 0.0000
私はあなたのdwgでこの問題に気づいた, 私の両親の1つで、私はそれを複製することはできません... :unsures:
 
ビューポートリストには、スキャフォールディングであるサブリスト(17 920.46 -258.024 30.4836)がありますが、なぜ、私は決して起きなかったのか、計算された座標に値を合計し、すべてを修正しません。
あなたのdwgのコピー/ペーストをすることで、問題が再作成し、新しいdwgを作成し、(モデルのみ)ビューポートを貼り付け、問題が消えます。
調査します。
ログイン
 
sublist 17 はビューポートオブジェクトの .target プロパティと同じです。
x y z は p5 と p6 ポイントに関係なく値します。
 
sublist 17 はビューポートオブジェクトの .target プロパティと同じです。
x y z は p5 と p6 ポイントに関係なく値します。
完全なrpor。
group 17 は autocad のターゲット変数の値です。 変数読まれただけ、ゼロだけ手段によって
Code:
(fun c:reset_target () (command "_.dview" "" "_po" '(0 0 0) '(0 0 1) "_x"))
すべてのケースでは、メソッドは座標を追加することによって動作します。
座標に関係なく合計する方法は、ターゲット値が設定されていない場合でも、グループは常にビューポートリストに存在しているようです。
 
私は長い間書いたコードを参照しているので、私は助けることができるかどうかわかりませんが、私はグループコード71を見て、dxfパーサーで私の指摘の問題を解決しました。
見つからない場合、またはよく覚えていない場合は、ゼロですから、ビューは見栄えがないので、wp と tp をオブジェクトの拡張子に持っているだけです。
Code:
 s1$<>"endtab" を
s$=dxff.readline:s1$=dxff.readline
int(val(s$))=16 なら wpx=val(s1$)
int(val(s$))=26 なら wpy=val(s1$)
if int(val(s$))=36 その後wpz=val(s1$)
int(val(s$))=17 の場合、tpx=val(s1$)
int(val(s$))=27 の場合、tpy=val(s1$)
int(val(s$))=37 なら tpz=val(s1$)
int(val(s$))=71 以降 orto=val(s1$)
ログイン
 
あなたは知っている, 男, 私は、進化についてあなたを示します.
習慣/快適性は、複数のテーブルを持つ単一のファイルで動作します(最後の1つは46)、各テーブルのレイアウトを作成します。
というと、出版によってすべての図面を素早く成形するので、どこかで変更を加えると、依存するテーブルをすべて更新するのがはるかに簡単です。
一部の顧客は46テーブルのファイルを必要としないので、1テーブルの46ファイルでは、その構成レイアウトのファイルをエクスポートする必要があります。
レイアウトエクスポート、レイアウトをエクスポートしますが、モデルスペース(レイアウトを失います)でのみ、特にレイアウトで設定されたディスプレイでエクスポートします(レイアウトで設定した場合「印刷スタイルを表示」)、黒と白のモデルが見つかります。
ひとつのレイアウトでは、すべてのレイアウトが行われます。
私は、レイアウトexport である他の lisp (type lxa) を試してみましたが、エクスポートレイアウトの同じ問題に苦しむ (明らかに)
私は layoutstodwgs を試してみましたが、それはケースです、私はモデル全体を複製するので、13mバイトファイルは私に46 13mバイトファイルになりました

そして、私はそれを書いた, gpの助けを借りて (大きいマスター) と rpor66 (libs の他の獣).
それは少し荒いです, 小さなエラー制御, しかし、あなたが必要とするものを行う
各レイアウトを別々のファイルにエクスポートし、レイアウトウィンドウに含まれている唯一のエンティティティを保ち、紙スペースに関連したエンティティティを含むレイアウト自体。

Code:
(defun reset_var())
(setq レイアウト nil アド nil layfol nil oldrgnmode nil layoutnumber nil count nil)
(setq vp nil flay nil p1 nil p2 nil p3 nil p4 nil p5 nil p6 nil p7 nil p8 nil )
(setq target_vp nil oldosmode nil todel nil count1 nil layname nil file_name nil ) )
(setq pspace_ent nil oldmaxvp nil old_thumb nil) (setq pspace_ent nil oldmaxvp nil old_thumb nil) (setq pspace_ent nil oldmaxvp nil old_thumb nil)) (setq pspace_ent nil oldmaxvp nil old_thumb nil) (setq pspace_ent nil oldmaxvp nil old_thumb nil) (setq pspace_ent nil )
)


;;;;;; サブフォルダ内の別のファイル内のすべてのレイアウトをエクスポート "レイアウト"
;;;;; 各ファイルのためにモデルの実体およびレイアウトを保持します(相対的なペーパー スペースの実体と)
;;;; レイアウトは、複数のビューポートを持っている場合は、単一のvieportを持っている必要があります。, プロブラムブレイク.
;;;;; タンクへの gp と rpor66 の cad3d.it を解決するために

(defun c:layexport9 )

(vl-load-com)


(setq 古いmaxvp (getvar "maxactvp")))
(setq 古い_thumb (getvar "updatethumbnail")))
(setvar "clayout" "model")


(setqレイアウト(レイアウトリスト))
(setq レイアウト (acad_strlsort レイアウト)))
(setq アド (getvar "dwgprefix")))
(setq layfol (strcat 広告 "layouts")))

(findfile layfol の場合)
(progn)
("\n la directory di output e' gia' esistente" を出力します)
\nla procedura potrebbe sovrascrivere ファイル gi sistenti
e produrre risultati inaspettati.
\nil プログラママ サラ ' エ タテ le variabili saranno azzerate")
(reset_var)
(終了)
)
)



(vl-mkdir layfol)
(setq 古いrgnmode (getvar "regenmode")))
(setvar「regenmode」) 0)

(setqのレイアウト番号(長さのレイアウト)))
(setq カウント 0)
(setq pspace_ent (sget "x" '(67 . 1))))))))



(各レイアウトレイアウトレイアウト)
(setvar「maxactvp」) 2) 2
(setvar "updatethumbnail" 0)
(setq レイアウト (nth カウントレイアウト)))
(setq vp (sget "x" (list (cons 0 "viewport")))))))))

(例:> (sslength vp)) 2) 2
(progn)
(setq vpnumerr (strcat "nel layou" レイアウト "ci sono piu' di una viewport)
\nil プログラママ potrebbe fornire risultati inaspettati e sara' terminato.
\nricordarsi di eliminare la ディレクトリ gi crata altrimenti la procedura Fallir nuovamente.")
(vpnumerr )
(reset_var)
(終了)
)
)

(setvar "clayout" レイアウト);;<----- cambia il レイアウト rendendo corrente quello in esame
;;;;;;*********inizio codices お問い合わせ
(setq flay (vlax-ename->vla-object (ssname vp 0)))))))
(vla-getboundingbox flay 'p1* 'p2*)
(setq p1 (vlax-safearray->list p1*)))
(setq p2 (vlax-safearray->list p2*)))
(setq p3 (list (car p1) (cadr p1)))))
(setq p4 (list (car p2) (cadr p2)))))
(setq p5 (trans p1 3 2))
(setq p6 (trans p2 3 2))

;;;<------ inizioのsuggerimentoのrpor
;;;;;;;;; somma il valore di ターゲット alle 座標 viewport
(例:assoc '17 (entget (ssname vp 0)))))
;;;se の esiste il の valore の di ターゲット
(progn)
(setq target_vp (cdr (ssname vp 0)))))))))
(setq p7 (+ (nth 0 p5) (nth 0 target_vp))) (+ (nth 1 p5) (nth 1 target_vp)) 0.00 )))
(setq p8 (+ (nth 0 p6) (nth 0 target_vp))) (+ (nth 1 p6) (nth 1 target_vp)) 0.00))))
;;<--------chiusura progn
;;<--------すべての esiste gruppo 17 nell'entita viewport

(setvar "clayout" "model")
;;;;;;;;;********* 良いコダイス gp*************
(setq oldosmode (getvar "osmode")))
(setvar「osmode」) 0)

(コマンド "_.select" "_crossing" p7 p8 ")

(コマンド "._undo" "_begin")
(コマンド "_erase" "_all" "_remove" "_previous" "_remove" pspace_ent")

(setqの計算1 -1)

(repeat レイアウト番号)

(setq count1) (+ count1 1))
(setq layname (nth count1 レイアウト))))
(/= layname レイアウト) (command "_layout" "_delete" layname));;<chiusura if


;;<-- chiusura の繰り返し

(コマンド "._undo" "_end")

(setq file_name (strcat layfol "\" レイアウト))
(コマンド "-purge" "_all" "" "" "_no")
(コマンド "-purge" "_all" "" "" "_no")
(setvar "maxactvp" 古いmaxvp)
(setvar "updatethumbnail" 古い_thumb)

(コマンド "_saveas" "" file_name)
(コマンド "_undo" "_back" "_y")

(setvar "clayout" "model")

(コマンド "_erase" "_crossing" p7 p8 ")
(コマンド "-purge" "_all" "" "" "_no")

(setq カウント (+ カウント 1)))

;;;;;<------------------ chiusura foreach レイアウト

(setvar "regenmode" 古いrgnmode)

;;<-------chiusura defun

(「\n estrae tutti i レイアウト di un dwg in file separati in una sottocartella レイアウト del dwg」)
\nfunziona con レイアウト che abbiano una sola viewport, ed esporta, per ogni レイアウト, sia la parte modello che il relativo レイアウト con le entita' appartenenti al paper space di quel レイアウト.
\n\nusare layexport9 per lanciare")
私はまだ解決しなければならない唯一の部分は、彼らが新しいサブフォルダ「レイアウト」に横たわるフォルダから外部の参照(xrifと画像)を物理的にコピーすることです。個々のレイアウトのファイルを開いたときには、欠けている参照通知を与えません。

xref dwg リストは以下のように取得できます。
Code:
;;;;xref blocchiを閉じるコディス

(setq *acad-object* (vlax-get-acad-object))))
(setq *active-doc* (vla-get-activedocument *acad-object*))))
(setq *blocks* (vla-get-blocks *active-doc*))))))
(vlax-for n *blocks*)
(例:vla-get-isxref n) :vlax-true)
(プログ)
(setq pippo (vla-get-path n))))
(setq pippo (ファインファイル pippo)))
)
)
)

;;;;xref blocchiを閉じるコディス
とイメージファイル名:
Code:
;;;;xref immagini を絞る codice
(defun imgfile ( / acad_image_dict )) )

(vl-catch-all-apply) (vl-catch-all-apply)
ラムダ ( )
(setq acad_image_dict) は、
(vla-item)
(vla-get-dictionaries)
(vla-get-activedocument)
(vlax-get-acad-object)
)
)
"acad_image_dict" は、
)
)
)
)
(setq リスト)
(acad_image_dict の場合)
(vlax-for エントリー acad_image_dict)
(setq img )
(vl-princ-to-string) (vl-princ-to-string)
(CDr)
(アスコット1)
(エントリー)
(vlax-vla-object->ename エントリ)
)
)
)
)
)
)
しかし、私はオートキャドシェルの操作に立ち往生しました。 20年間使用していません。

マスターの別の推圧? :
 
一方、同期/非同期シェルの使用を可能にするこのファイルを取り、xcopyコマンドをプログラムの「クリーン」を管理するために、xcopyコマンドのみを使用して編集することもできます。
問題がある場合、私はここにいます。
ログイン
 

Attachments

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top