用元宝写了一个,基本能满足我的需求了
 - (defun c:HHMX_YY (/ p1 p2 minX maxX minY maxY width centerX startX steps i stepSize xPos lineEnt
- numLines temp rectEnt previousStep)
- ;; 设置绘图环境
- (setvar "CMDECHO" 0)
- (setvar "CECOLOR" "8")
- (setq p1 (getpoint "\n指定矩形第一角点: "))
- (setq p2 (getcorner p1 "\n指定矩形第二角点: "))
- (if (> (car p2) (car p1))
- (setq temp p1
- p1 p2
- p2 temp
- )
- )
- (setq minX (car p1))
- (setq maxX (car p2))
- (setq minY (min (cadr p1) (cadr p2)))
- (setq maxY (max (cadr p1) (cadr p2)))
- (setq width (- maxX minX))
- (command "_.RECTANGLE" "_none" p1 "_none" p2)
- (setq rectEnt (entlast))
- (initget "8")
- (setq numLines (getint "\n请输入竖线数量 <8>: "))
- (if (null numLines) (setq numLines 8))
- (if (<= numLines 0)
- (progn
- (alert "错误:竖线数量必须大于0!")
- (command "_.ERASE" rectEnt "")
- (exit)
- )
- )
- (setq startX maxX)
- (if (>= numLines 1)
- (progn
- (setq xPos (- maxX (/ width 2.0)))
- (command "_.LINE"
- (list xPos minY)
- (list xPos maxY)
- ""
- )
- (setq previousStep (/ width 2.0))
- )
- )
- (setq i 1)
- (repeat (max 0 (- numLines 1))
- (setq stepSize (/ previousStep 2.0))
- (setq xPos (- xPos stepSize))
- (command "_.LINE"
- (list xPos minY)
- (list xPos maxY)
- ""
- )
- (setq previousStep stepSize)
- (setq i (1+ i))
- )
- (command "_.ERASE" rectEnt "")
- ;; 恢复环境设置
- (setvar "CECOLOR" "bylayer")
- (setvar "CMDECHO" 1)
- (princ (strcat "\n成功创建" (itoa numLines) "条竖线,最后步长为: "
- (rtos previousStep 2 4)))
- (princ)
- )
|