Archive for category LISP
ある点からの曲線への投影点
in LISP on 2005/08/04
;;曲線を選択
(setq E_NAME (entsel))
;;曲線以外の場所の点を選択
(setq PT (getpoint))
(setq V_OBJ (vlax-ename->vla-object (car E_NAME)))
(setq S_PT (vlax-curve-getClosestPointTo V_OBJ PT T))
S_PT点がそれ。
VLISPは曲線関数があってうれしいね。
間違えを訂正しました。m(_ _)m
ARXオブジェクトID
in LISP on 2005/04/05
ようやくフィールドが使えそうな雰囲気なので。
(setq ENAME (car (entsel)))
(setq VLOBJ (vlax-ename->vla-object ENAME))
(vla-get-objectid VLOBJ)
文字列に数字が入ってるか
in LISP on 2005/03/25
半角数字
(wcmatch STRING “*#*”)
全角数字
(wcmatch STRING “*[1234567890]*”)
変換マトリクス
in LISP on 2005/02/17
UCSが設定してある図面において、
赤い線をLISPでブロックにすることを考える。
まずは普通にentgetしてブロックにし、insertしてみる。
(defun c:test(/ E_DATA) ;;線のエンティティデータE_DATA (setq E_DATA (entget (car (entsel "\n線を選択:")))) ;;ブロック名B_NAME (setq B_NAME "テストォ") (entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") '(67 . 0) (cons 8 (getvar "clayer")) '(100 . "AcDbBlockBegin") '(70 . 2) '(10 0.0 0.0 0.0) (cons 2 B_NAME) '(1 . "") ) ) ;;属性 (entmake E_DATA) ;;ブロック宣言終わり (entmake (list '(0 . "ENDBLK") (cons 8 (getvar "clayer")) ) ) )
すると、あ~ら不思議、UCSが設定されてるので、とんでもない傾きに。
つまり、WCSでの傾きを求めなければならない。
こんな点の変換を行う必要がある・・・ってどうすればいいんじゃ!
いや~な予感がしつつ、マトリクス変換とかいうのを使わにゃ面倒だ。
ってかマトリクス変換って方が面倒に感じる私だが、がんばるしかない。
(defun y_ucsrotate( PT ;座標 B_PT ;挿入点 / ) (y_pt+ (y_matrix (y_pt- PT B_PT) (y_ucsmatrix)) B_PT) ) (defun y_matrix( PT ;座標 MT ;変換マトリクス / ) (mapcar '(lambda (x) (+ (* (nth x (nth 0 MT))(nth 0 PT)) (* (nth x (nth 1 MT))(nth 1 PT)) (if (= (length PT) 3) (* (nth x (nth 2 MT))(nth 2 PT)) 0.0 ) (nth x (nth 3 MT)) ) ) (if (= (length PT) 3) '(0 1 2) '(0 1) ) ) ) (defun y_ucsmatrix( / ) (list (trans '(1 0 0) 0 1 T) (trans '(0 1 0) 0 1 T) (trans '(0 0 1) 0 1 T) '(0 0 0) ) )
UCSは設定したままでね。
(y_ucsrotate 変換したい座標 ブロックの原点)
これで変換先のWCSの座標が求められる(はず)。
試しに、
(command “circle” (trans (y_ucsrotate (trans (getpoint) 1 0) (trans (getpoint) 1 0)) 0 1) “500”)
とかしてみると、変換されてるのがわかる。
誰か行列教えてくれ~。
印刷スタイルテーブル
in LISP on 2005/01/16
アクティブなレイアウト(モデル含)のスタイルテーブルの変更
(vlax-put-property (vlax-get-property (vlax-get-property (vlax-get-acad-object) 'ActiveDocument ) 'ActiveLayout ) 'StyleSheet "Default.stb" )
ポリラインの接線
in LISP on 2005/01/12
道路の測点を打ったり、幅員描くLISPを書き直そうとしてたら、いいもの見つけた。
導関数
そういえば、微分習ってた時に、接線とかなんとか先生が言ってた気が。
もっと早く気づけばよかったよ。
;;ポリライン上の任意の点においての接線と接線の垂直線を描くVLISP (vl-load-com) (defun c:test( / e_name e_obj pt param pt2 pt3 ) (setq e_name (car (entsel))) (setq e_obj (vlax-ename->vla-object e_name)) (setq pt (getpoint)) (setq param (vlax-curve-getParamAtPoint e_obj pt)) (setq pt2 (vlax-curve-getFirstDeriv e_obj param)) (setq pt3 (vlax-curve-getSecondDeriv e_obj param)) (command "xline" pt (mapcar '+ pt pt2) (mapcar '+ pt pt3) "") )