ziele_o2k 发表于 2022-7-5 13:11:38

沿路径编号

cad有很多很棒的编号程序(即Lee的增量编号或Gile的增量编号)。
但我没有找到任何编号套件,允许我选择路径(即lwpolyline)并根据此路径编号。
下图显示了我想要实现的目标。

我只有一个问题,如何识别,在我的路径的哪一边是圆到数字(上/下/左/右等)?
对于沿曲线(lwpolyline)排序,我将使用函数vlax curve getClosestPointTo和vlax curve getParamAtPoint。 
现在我们可以假设路径是由line对象生成的。
 

maratovich 发表于 2022-7-5 13:21:41

你的数字是方块还是圆圈中的文字?

ronjonp 发表于 2022-7-5 13:31:19

张贴你用来生成它的代码。

ziele_o2k 发表于 2022-7-5 13:38:43

@RonJonpt没有代码来生成这个,我手动做了这个来展示我想要实现的
@马拉托维奇在我的画里有圆圈和文字。假设我将使用圆。
通常我只需要知道如何根据所选路径对“行”排序。

Emmanuel Delay 发表于 2022-7-5 13:45:34

我会这样开始。 
它不会告诉你左,右。。。但它告诉你沿着这条路的距离。绘制路径的人,多段线的起点是距离0。这就是低数字应该出现的地方。
如果需要,可以反转。
 
该脚本仅在屏幕上打印该距离(以及其他数据)。你真正的问题是得到这个,对吗?
 
我假设这些圆是具有属性的块。
 
附件中的dwg
 


(defun c:test  (  / ss path i  pt1 pt2 dist blk)
 
  (princ "\nSelect blocks: ")
  (setq ss (ssget  '((0 . "INSERT") ) ))
  (setq path (entsel  "\nSelect Path: "))
 
  (setq i 0)
  (repeat (sslength ss)
 
    (princ "\nBlock number: ")
    (princ i)
    
    (setq blk (ssname ss i))
    (setq pt1 (cdr (assoc 10 (entget blk))) )
    (princ "\nInsert point of block: ")
    (princ pt1)
    (setq pt2 (vlax-curve-getClosestPointTo (car path) pt1))
    (princ "\nClosest point to on path: ")
    (princ pt2)
    
    (setq dist (vlax-curve-getDistAtPoint (car path) pt2) )
    (princ "\nClosest distance to path: ")
    (princ (distance pt1 pt2))

    (princ "\nDistance along path: ")
    (princ dist)
    
    (princ "\n")
    (setq i (+ i 1))
    
  )  
  (princ)
)

ronjonp 发表于 2022-7-5 13:51:29

不是很漂亮,但这可能会给你一个开始。它当前插入文本。
 

(defun c:foo (/ a aa b c d e l ll n p pa)
;; RJP » 2018-10-12
;; Divides a polyline into segments then divides another distance at each of those
;; points while incrementing a number by 1. Polyline direction will dictate what
;; side the numbering starts on. Happy Friday!
(cond
    ((and (setq e (car (entsel "\nPick your centerline: ")))
          (= "LWPOLYLINE" (cdr (assoc 0 (entget e))))
;;;          (setq a (getint "\nEnter number of segments to place on centerline: "))
;;;          (setq b (getdist "\nEnter length for each segment: "))
;;;          (setq c (getint "\nEnter quantity of numbers to place on each segment: "))
          ;; Testing numbers
          (setq        a 50
                b 25.
                c 5
          )
   )
   (setq d (vlax-curve-getdistatparam e (vlax-curve-getendparam e)))
   (setq n 0)
   (repeat a
       (cond
       ((setq p (vlax-curve-getpointatdist e n))
          (setq aa (angle '(0 0 0) (vlax-curve-getfirstderiv e (vlax-curve-getparamatpoint e p))))
          (setq n (+ n (/ d (1- a))))
          (setq p (polar p (setq pa (+ aa (/ pi 2.))) (/ b 2.)))
          (entmakex (list '(0 . "line") (cons 10 p) (cons 11 (polar p (+ pi pa) b)) '(8 . "line")))
          (setq l nil)
          (repeat c (setq l (cons p l)) (setq p (polar p (+ pi pa) (/ b (1- c)))))
          (setq ll (cons (reverse l) ll))
       )
       )
   )
   (setq n 0)
   (setq ll (reverse ll))
   (while (car ll)
       (foreach        p (mapcar 'car ll)
       (entmakex (list '(0 . "TEXT")
                       '(100 . "AcDbEntity")
                       '(67 . 0)
                       '(8 . "text")
                       '(100 . "AcDbText")
                       (cons 10 p)
                       (cons 40 (/ (/ b (1- c)) 2.))
                       (cons 1 (itoa (setq n (1+ n))))
                       '(50 . 0.0)
                       '(41 . 1.0)
                       '(51 . 0.0)
                       '(71 . 0)
                       '(72 . 1)
                       (cons 11 p)
                       '(100 . "AcDbText")
                       '(73 . 2)
                   )
       )
       )
       (setq ll (mapcar 'cdr ll))
   )
    )
)
(princ)
)

ziele_o2k 发表于 2022-7-5 13:57:30

谢谢@ronjonp的小费。
 
(从此帖子排序)
 
例如:
 

Lee Mac 发表于 2022-7-5 14:06:17

乍一看-

(defun vector (p1 p2)
    (mapcar '(lambda (%1 %2) (- %2 %1) ) p1 p2 )
)可以写入-
但是在这一点上,您也可以直接内联编写mapcar函数。
 
还有这个-

      (if lst
            (setq lst (cons c lst))
            (setq lst (list c))
      )可以替换为-
6因为当lst为零时(cons c lst)==(list c)。
 
 

ziele_o2k 发表于 2022-7-5 14:18:05

@李-新手失误
一些改进:
7
页: [1]
查看完整版本: 沿路径编号