非常简单,有一个图案填充边界选项,它在图案填充周围创建一条pline,然后使用它,你可以在多边形内执行(ssget“wp”),它将找到所有对象。现在有点忙,我会看到,
这是一个开始,在对象周围的pline上尝试。
- ; Text in polygons
- ; By Alan H may 2013
- (vl-load-com)
- (defun getcoords (ent)
- (vlax-safearray->list
- (vlax-variant-value
- (vlax-get-property
- (vlax-ename->vla-object ent)
- "Coordinates"
- )
- )
- )
- )
- (defun co-ords2xy ()
- ; convert now to a list of xy as co-ords are x y x y x y if 3d x y z x y z
- (setq numb (/ (length co-ords) 2))
- (setq I 0)
- (repeat numb
- (setq xy (list (nth I co-ords)(nth (+ I 1) co-ords) ))
- (setq coordsxy (cons xy coordsxy))
- (setq I (+ I 2))
- ) ; end repeat
- ) ; end defun
- ; program starts here
- ; choose output file change acdatemp to what you want
- (setq fname (strcat "c:/alan/" (getstring "\nEnter file name ")))
- (setq fout (open fname "w"))
- (setq plobjs (ssget (list (cons 0 "lwpolyline"))))
- (setq numb1 (sslength plobjs))
- (setq x numb1)
- (repeat numb1
- (setq obj (ssname plobjs (setq x (- x 1))))
- (setq co-ords (getcoords obj))
- (co-ords2xy)
- ; write pline co-ords here
- (setq numb3 (length co-ords))
- (setq z numb3)
- (setq ansco-ords "")
- (repeat numb3
- (setq ansco-ords (strcat ansco-ords (rtos (nth (setq z (- z 1)) co-ords) 2 3 ) " " ))
- )
- (setq ans (strcat "Pline " ansco-ords))
- (write-line ans fout)
- (setq ansco-ords "")
- (setq ss (ssget "WP" coordsxy ) ; selection set within polygon
- (if (= ss nil)
- (princ "\nnothing inside")
- (progn
- (setq coordsxy nil) ; reset for next time
- (setq numb2 (sslength ss))
- (setq y numb2)
- (repeat numb2
- (setq anstext (vlax-get-property (vlax-ename->vla-object (ssname ss (setq y (- y 1)))) "Textstring"))
- (princ anstext) ; change to write text to file
- (write-line (strcat "text " anstext) fout)
- (princ "\n")
- ) ; end repeat2
- (setq ss nil) ; reset for next poly
- )
- )
- ) ; end repeat1
- (close fout)
- (princ)
|