1樓:朱正偉
點表的樣式可以在cad命令列檢視,autolisp**如下:
;命令tes;計算多段線節點座標並加入表在命令列顯示
(defun c:tes ( / ent i p1 ss1)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(if (null vlax-dump-object) (vl-load-com) );載入vlax函式
(if (and (setq ent (entsel "\n請選擇多段線"))
(setq ent (car ent));提取lisp物件
(= (cdr (assoc 0 (entget ent))) "lwpolyline");確認是多段線
)(progn
(setq i (vlax-curve-getendparam ent));計算節點數量
(if (vlax-curve-isclosed ent) (setq i (- i 1)) );如果物件封閉節點數量減少1
(setq ss1 '());建立空表
(while (> i -1);迴圈計算
(setq p1 (vlax-curve-getpointatparam ent i));計算節點3d點
(setq ss1 (cons p1 ss1));點加人表
(setq i (- i 1));上一個節點
);while;迴圈結束
(princ ss1);命令列顯示座標表))
(princ);程式結束)
2樓:
((x1 y1)(x2 y2))一般是這種,看你怎麼提取了。
lisp 如何獲取圖元中所有點資訊並列表
3樓:
用等分函式線的函式,然後儲存座標到一個表就行了。
4樓:
(entget (ssname (ssget ) 0))(ssget ) 取得一個選擇集
(ssname (ssget ) 0)根據索引值取出選擇集中的物件名稱
(entget (ssname (ssget ) 0))取出物件名稱的資訊列表
如何用lisp寫一個。點選中多段線後,用指定大小的圓來像其填充滿?
5樓:朱正偉
如果手動繪製的話,應當怎樣繪製?應該提供方法。
只有手動可以做到,程式就可以做到。
auto lisp 中求一段多段線的座標儲存在一個表中,然後在每個點上畫圓。求改函式
6樓:匿名使用者
你的程式第三行中(entget(pline_name))是錯誤的,pline_name不應該有括號。
程式編寫過於複雜,簡化程式如下:
(defun c:pwline (/ pline_name pline_content c)
(setq pline_name (car (entsel "請選擇需要標註的多段線:"))
pline_content (entget pline_name)
c (assoc 10 pline_content)
)(while c
(command "circle" (cdr c) 10)
(setq pline_content (cdr (member c pline_content))
c (assoc 10 pline_content))))
需要一個在多段線上加點的lisp 謝謝
7樓:濯紹祺
;;;用ap命令載入後,輸入命令gm,先選中心線,再選任意點即可
(defun c:gm (/ cur pt olderr olderror *error*)
;;自定義錯誤處理函式
(defun myerror (s)
(if (and (/= s "函式被取消")
(/= s "函式已取消")
(/= s "function cancelled")
(/= s "quit / exit abort")
)(princ (strcat "錯誤:" s))
)(setq *error* olderror)
(command "undo" "end")
(setvar "cmdecho" 1)
(princ)
);;系統變數設定
(setvar "cmdecho" 0)
(setq olderror *error*
*error* myerror
)(while (not cur)
(princ "\n請選擇曲線:")
(setq cur (car (entsel)))
(if cur (setq cur (vlax-ename->vla-object cur)))
)(setq pt (getpoint))
(if(not pt) (exit))
(setq pt (vlax-curve-getclosestpointto cur pt))
(princ "\n樁號 = ")
(princ (vlax-curve-getdistatpoint cur pt))
;;還原系統變數
(setq *error* olderror)
(setvar "cmdecho" 1)
(princ))