这很奇怪。
看看这是否有效,我写了一个自定义除法。
如果有人有比我的(getAngle)更优雅的方式,请发布。
- (vl-load-com)
- (defun Insert (pt Nme scale rotation)
- (entmakex (list (cons 0 "INSERT")
- (cons 2 Nme)
- (cons 10 pt)
- (cons 41 scale) (cons 42 scale) (cons 43 scale)
- (cons 50 rotation)
- ))
- )
- ;;(defun getAngle (pl dist / param)
- ;; (setq ip1 (vlax-curve-getPointAtDist pl (- dist 0.001) ))
- ;; (setq ip2 (vlax-curve-getPointAtDist pl (+ dist 0.001) ))
- ;; (angle ip1 ip2)
- ;;)
- (defun getAngle (obj dist / )
- (angle '(0.0 0.0 0.0) (vlax-curve-getfirstderiv obj (vlax-curve-getparamatdist obj dist)))
- )
- (defun customDivide (block pl segments sc / d2 ip i ang dist)
- (setq d2 (vla-get-length (vlax-ename->vla-object pl) ))
- (setq i 1)
- (repeat (- segments 1)
- (setq ip (vlax-curve-getPointAtDist pl (setq dist (* i (/ d2 segments)) )))
- (setq ang (getAngle pl dist))
- (Insert ip block sc ang )
- (setq I (+ i 1))
- )
- )
- (defun c:DEB(/ blk ss s name)
- (if
- (and
- (setq blk (entsel "\nSelect Block: "))
- (setq ss (ssget "_:L" '((0 . "LINE,SPLINE,LWPOLYLINE,POLYLINE"))))
- (setq s (getint "\nEnter the number of segments: "))
- (setq scl (getdist "\nEnter a scale : "))
- )
- (progn
- (setq name (cdr (assoc 2 (entget (car blk)))))
- ((lambda (i / ss1)
- (while
- (setq ss1 (ssname ss (setq i (1+ i))))
- (customDivide name ss1 s scl)
- )
- )
- -1
- )
- )
- (princ)
- )
- (princ)
- )
|