你好
我有一个lisp,用保存在文本文件中的坐标一次性标记所有圆。lisp和dwg如下所示。我的问题是如何将带前缀的圆圈放在不同的组中。在查找了选择圆的ssget函数后,我还没有找到一个很好的选择方法。在web中找到了四种方法,并将其放入代码中。第一种方法是使用选择方法“w”工作,但窗口没有那么灵活,无法选择我想要的。第二种方法在选择圆后停止。第三种方法是“错误:错误参数类型:lselsetp nil”。第四种方法的结果与第三种方法相同。我考虑使用WPolygon选择方法,但不知道如何编写。
顺便问一下,如何将实体名称导出到文本文件?包含实体名称的变量不是字符串,因此我不知道如何将其放入文本文件中。
图纸2.dwg
- (defun c:labelcircle()
- (command "CMDECHO" "0")
- (command "layer" "m" "hk" "c" "1" "" "")
- (setq yy (entsel"\nselect the circle :"))
- (setq sews (getstring "\ninput the prefix:"))
- (setq f (open (getfiled "text file save as" "c:" "txt" 1) "w"))
- (setq y (entget (car yy)))
- (setq tc (assoc 8 y))
- (setq dx (assoc 40 y))
- (setq zg (cdr dx))
- ;-----1st method
- ;(setq p1 (getpoint "\nFirst Corner: "))
- ;(setq p2 (getcorner p1 "\nSecond Corner: "))
- ;(setq s (ssget "w" p1 p2 (list '(0 . "CIRCLE") tc dx)))
- ;-----2nd method
- ;(command "select" "WP")
- ;(setq s (ssget "_P"))
- ;-----3rd method
- ;(setq ptlst '())
- ;(setq pts 1)
- ;(while pts
- ; (setq pts(getpoint "\nSelect Point: "))
- ; (if pts (setq ptlst (cons pts ptlst)))
- ;_while
- ;(if pts
- ; (setq s(ssget "_WP" ptlst))
-
- ;-----4th method
- ;(while (setq pt (getpoint pt "\nSpecify a point:"))
- ; (setq ptlst (cons pt ptlst))
- ;while
- ;(if ptlst
- ; (setq s (ssget "_WP" ptlst))
- ;if
- ;-----
- (setq n 0)
- (setq m (- (sslength s) 1))
- (while
- (setq a (ssname s m))
- (setq xy (cdr (assoc 10 (entget a))))
- (setq xy1 (polar xy (/ pi 4) )
- (setq dh (rtos (+ 1 n) 2 0))
- (command "layer" "s" "hk" "")
- (command "text" "j" "m" xy1 3 "0" (strcat sews dh))
- (setq ss (strcat sews dh "," (rtos (nth 0 xy) 2 3) "," (rtos (nth 1 xy) 2 3) ","))
- (write-line ss f)
- (setq n (1+ n))
- (setq m (1- m))
- );while
- );defun
|