这是我目前的代码:
- (defun c:insertmlinepi (/ *insertmlinepians*
- ent mlinepts plinepts
- oldcmlscale oldclayer *error*
- )
- (defun *error* (msg)
- (if oldcmlscale
- (setvar 'cmlscale oldcmlscale)
- )
- (if oldclayer
- (setvar 'clayer oldclayer)
- )
- (if (not
- (member msg '("Function cancelled" "quit / exit abort"))
- )
- (princ (strcat "\nError: " msg))
- )
- (princ)
- )
- (insertmlinepi:settings)
- (if (and (setq ent (car (entsel "\nSelect MLINE: ")))
- (= (cdr (assoc 0 (entget ent))) "MLINE")
- )
- (progn
- (setq mlinevla (vlax-ename->vla-object ent))
- (setq mlinescale (vlax-get mlinevla 'MLineScale)
- mlinelayer (vlax-get mlinevla 'Layer)
- )
- (setq
- mlinepts (mapcar 'cdr
- (vl-remove-if-not
- (function (lambda (pt) (= (car pt) 10)))
- (entget ent)
- )
- )
- )
- (setq oldcmljust (getvar 'cmljust))
- (setvar 'cmljust mlinescale)
- (setq oldclayer (getvar 'clayer))
- (setvar 'clayer mlinelayer)
- (command "._PLINE" (mapcar 'command pts))
- (setq plinelast (entlast))
- (if (= *insertmlinepians* "Insert")
- (progn
- (command "._INSERTFEATUREPI" plinelast)
- (while (> (logand (getvar "CMDACTIVE") 1) 0)
- (command PAUSE)
- )
- )
- (progn
- (command "._DELETEFEATUREPI" plinelast)
- (while (> (logand (getvar "CMDACTIVE") 1) 0)
- (command PAUSE)
- )
- )
- )
- (setq
- plinepts (mapcar 'cdr
- (vl-remove-if-not
- (function (lambda (pt) (= (car pt) 10)))
- (entget plinelast)
- )
- )
- )
- (command "._mline" (foreach pt pts (command pt)))
- (setvar 'cmlscale oldcmlscale)
- (setvar 'clayer oldclayer)
- )
- )
- (princ)
- )
- ;;;This is the settins portion of the code
- (defun insertmlinepi:settings ()
- (initget "Insert Delete")
- (setq *insertmlinepians*
- (cond
- ((getkword
- "\nDo you want to [insert/Delete] PI <Insert>: "
- )
- )
- ("Insert")
- )
- )
- )
我的问题是,我似乎无法从多线图中正确提取点来绘制pline,并且我不确定我的代码在插入或删除PI后是否实际获得了修改后的点。有人对我做错了什么有什么建议吗? |