- (defun vpPrompt (Reac args / ss sCnt eCnt ent obj)
- (if (and (= (car args) "QSAVE")
- (setq ss (ssget "X" '((0 . "VIEWPORT"))))
- (not(zerop (setq i (sslength ss)))))
- (progn
- (setq sCnt 0 eCnt 0)
- (foreach vp [color="Blue"](mapcar 'vlax-ename->vla-object
- (vl-remove-if 'listp
- (mapcar 'cadr(ssnamex ss)))) ; transforms set to list[/color]
- (if(vl-catch-all-error-p
- (vl-catch-all-apply
- 'vla-put-DisplayLocked(list vp [color="#0000ff"]:vlax-true[/color])))
- [color="#0000ff"](setq eCnt(1+ eCnt))
- (setq sCnt(1+ sCnt))[/color]
- ); end if
- ); end foreach
- [color="#0000ff"](princ(strcat "\n" (itoa sCnt) " Vieport(s) locked"
- (if(/= 0 eCnt)
- (strcat ", " (itoa eCnt) " were on locked layer! ")
- "."
- ); end if
- ); end strcat
- ); end princ[/color]
- ); end progn
- ); end if
- (princ)
- )
1.如果你进入一个更严肃的层次,那么使用选择集是没有多大意义的。LISP-一种处理列表并将选择集转换为列表的语言,它为您提供了许多新功能。例如,使用FOREACH、MAPCAR、APPLY、LAMBDA函数,而不是使用SSNAME进行标准和单调的实体提取。
2.当然,您可以使用整数作为系统常数,但仍建议使用全名:vlax true比1更具信息性,但如果你看其他常数,很难想象它对应于12个acAlignmentMiddleRight。
3.每次你告诉我所有的视口都被锁定了,事实上,有些可能被锁定了。所以我完成了你的提示。 |