1樓:設計人生
方案一:直接讀取dwg格式檔案有點難度,估計高手會做方案二:若是檔案有很多要做的話,可以用c#,c++,vb通過com去開發,用com方式依次開啟dwg圖檔,然後遍歷圖元來進行你的要求來運算
方案三:若是檔案有很多要做的話,也可以用autolisp來做,自動開啟你的檔案列表,然後遍歷圖元來進行你的要求來運算
方案四:若是檔案不是很多的話,也可以手動開啟dwg檔案,然後編寫lisp函式遍歷圖元來進行你的要求來運算
或者你發一些cad參考圖檔給我,我來幫你看看到底怎麼做合適若是覺得滿意的話還請採納
求修改lisp程式,如何提取cad圖中多段線的座標(要當前ucs座標系)
2樓:匿名使用者
(defun c:tqzb (/)
(setq cm (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if (setq wjm (getfiled "請指定要儲存的座標檔案" "e:\\" "txt" 1))
(if (setq ssa (ssget '((0 . "lwpolyline"))))
(progn
(setq fff (open wjm "w")
n (sslength ssa)
i 0
no 0
)(repeat n
(setq dxf (entget (ssname ssa i))
i (1+ i)
ptb (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= (car x) 10)) dxf))
ptb (mapcar '(lambda(x)(trans x 0 1)) ptb)
)(foreach pt ptb
(setq no (1+ no))
(write-line (strcat (itoa no) ","
(rtos (car pt) 2 2) ","
(rtos (cadr pt) 2 2) ","
)fff))
)(close fff)
(princ (strcat "\n座標已存入\"" wjm "\"中"))))
)(setvar "cmdecho" cm)
(princ))
cadlisp獲取當前檢視座標 30
3樓:雪v歌
複製下面的指令碼到命令列回車即可載入,輸入pldd,程式會提示選擇pline,選擇pline後會列印所有的三維座標
(defun c:pldd (/ wb cc ss1 aa pts bhbz ent)
(setq ent (car (entsel "\n請選擇pline")))
(setq wb (entget ent) cc nil bhbz (cdr (assoc 70 wb)) )
(cond
((= (cdr (assoc 0 wb)) "polyline")
(setq ss1 (entnext ent))
(while (/= ss1 nil)
(setq aa (entget ss1))
(if (= (cdr (assoc 0 aa)) "vertex") (progn
(setq aa (cdr (assoc 10 aa)))
(if (/= aa nil) (progn
(if (= (length aa) 2)
(setq aa (list (car aa) (cadr aa) 0.0) )
)(if (= cc nil)
(setq pts aa)
)(setq cc (cons aa cc))
))(setq ss1 (entnext ss1))
)(setq ss1 nil)))
(if (= bhbz 1)
(setq cc (cons pts cc))))
((= (cdr (assoc 0 wb)) "lwpolyline")
(setq wb (member (assoc 10 wb) wb))
(while (assoc 10 wb)
(setq aa (cdr (assoc 10 wb)))
(if (= (length aa) 2)
(setq aa (list (car aa) (cadr aa) 0.0) )
)(if (= cc nil)
(setq pts aa)
)(if (= (length aa) 2)
(setq aa (list (car aa) (cadr aa) 0.0) )
)(setq cc (cons aa cc) wb (cdr wb))
(if (assoc 10 wb)
(setq wb (member (assoc 10 wb) wb))))
(if (= bhbz 1)
(setq cc (cons pts cc))))
((= (cdr (assoc 0 wb)) "spline")
(setq wb (member (assoc 11 wb) wb))
(while (assoc 11 wb)
(setq aa (cdr (assoc 11 wb)))
(if (= (length aa) 2)
(setq aa (list (car aa) (cadr aa) 0.0) )
)(if (= cc nil)
(setq pts aa)
)(setq cc (cons aa cc) wb (cdr wb))
(if (assoc 11 wb)
(setq wb (member (assoc 11 wb) wb))))
4樓:
貼上這個**就可以實現獲取圓心座標
(vlax-get (vlax-ename->vla-object (car (entsel))) 'center )
autolisp程式設計求助,如何得到螢幕的中點的座標
5樓:朱正偉
取的autocad當前視口中點,**如下:
6樓:
windows api
請採納。。。。
7樓:檀晶進騫堯
很簡單的一個系統變數就能獲得,參見下面**:
(setq
pt(getvar
"viewctr"))
如果你還想獲得螢幕的四個角點的座標,可以利用系統變數viewsizescreensize配合上面得到的螢幕中心座標獲得。
下面在給你個**,可以獲得當前拾取框的高度,在你選取實體的時候這個**很有用:
;|求拾取框的高度
|;(defun
$xdlsp_drawing_getpickboxheight()(*
(/(getvar
"pickbox")
(cadr
(getvar
"screensize")))
(getvar
"viewsize"))
)上面**摘自曉東工具箱裡面的系統**庫裡面的**。
求修改lisp程式,如何提取cad中多個點的座標,(本人想提取ucs座標系)另外只需要提取x,y值,不要z 5
8樓:匿名使用者
我有提取cad裡的座標到excel**的軟體,可以永久使用的,你要嗎?
我有一組數有十幾萬個座標點,如何利用lisp程式快速匯入cad中,並可以快速處理! 10
9樓:志遠
lisp肯定快不了,那個東西慢,我可以c++幫您定製一個,根據工作量略微收費,有意向的話,**我 1375045156
10樓:匿名使用者
用lisp直接寫圖形資料庫也不慢,十幾萬個座標點就十幾秒。
cad圖紙,autolisp提取圓心座標,發現提取的座標與cad裡面的屬性不一樣,什麼原因;
11樓:匿名使用者
這個圖是由其他的軟體轉過來的,下圖中的洋紅虛線圓的z軸是 -1,你用list命令可以檢視到。我以前見到從ug轉過來的圖中有很多是這樣的,只有重畫一次這個圓