Michalis 发表于 2022-7-6 07:57:18

我需要一些帮助,创建选项卡

大家好,
我是新来的,我需要一些帮助,
我想画一条线,(它是一种剖面),然后应该用多段线或带计数的线图层生成一个表,我已经用Mechanical using Section和dx完成了,但我需要用lisp更快,我可以用table或block,所以当我插入它时,应该需要第一个点,然后是第二个点,并在一个带计数的框中给我所有图层名称,
请原谅我的英语,
请参见下图

Tharwat 发表于 2022-7-6 08:02:09

欢迎来到Cadtutor
 
 
这一节是关于什么的?它由什么组成?
 
如果你用英语展示表格,大家都会看得更清楚
 
你能上传那个部分的图纸吗?

Michalis 发表于 2022-7-6 08:06:48


你说得对,这是一个新的英文截图,
故事是这样的,
我为我使用的每根电缆使用层名称,例如,NYY 5x10mm2是层名称,NYY 5x10mm2也是,
根据我的图纸,从A-B中,我有许多电缆,9FTP Cat5 1NYY 5x10,1NYY 3x120+70+1x90mm2 2NYY 5x16等,因此,我想选择2点(A-B),例如,
第二幅图显示了所有通过2个点(模型空间)的线,所以现在我必须从一个检修孔到另一个检修孔,向工作现场的伙计们演示,并告诉他们管道将如何进行,
 
截面是一条简单的多段线,与其他多段线相交,
 

Lee Mac 发表于 2022-7-6 08:09:15

这应该让你开始:
 

(defun c:LineCount ( / a b i l p q s )
   (if
       (and
         (setq p (getpoint "\nPick 1st Point: "))
         (setq q (getpoint "\nPick 2nd Point: " p))
       )
       (if (setq s (ssget "_F" (list p q) '((0 . "*LINE"))))
         (progn
               (repeat (setq i (sslength s))
                   (setq a (cdr (assoc 8 (entget (ssname s (setq i (1- i)))))))
                   (if (setq b (assoc a l))
                     (setq l (subst (list a (1+ (cadr b))) b l))
                     (setq l (cons(list a 1) l))
                   )
               )
               (terpri)
               (princ (LM:PadBetween "\nLayer" "Count" "." 40))
               (princ (LM:PadBetween "\n" "" "=" 40))
               (foreach x (vl-sort l '(lambda ( a b ) (< (cadr a) (cadr b))))
                   (princ (LM:PadBetween (strcat "\n " (car x)) (itoa (cadr x)) "." 40))
               )
               (textpage)
         )
         (princ "\nNo lines found between selected points.")
       )
   )
   (princ)
)

;;---------------------=={ Pad Between }==--------------------;;
;;                                                            ;;
;;Returns a string of a minimum specified length which is   ;;
;;the concatenation of two supplied strings padded to a   ;;
;;desired length using a supplied character.                ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;s1,s2 - strings to be concatenated                        ;;
;;ch    - character for padding                           ;;
;;ln    - minimum length of returned string               ;;
;;------------------------------------------------------------;;
;;Returns:Concatenation of s1,s2 padded to a min length   ;;
;;------------------------------------------------------------;;

(defun LM:PadBetween ( s1 s2 ch ln )
   (
       (lambda ( a b c )
         (repeat (- ln (length b) (length c)) (setq c (cons a c)))
         (vl-list->string (append b c))
       )
       (ascii ch)
       (vl-string->list s1)
       (vl-string->list s2)
   )
)

Michalis 发表于 2022-7-6 08:10:31

喜欢它!
但是..!!:-)
如何在绘图时显示我选择的点?我想展示一下我从哪一点找到了这些数据?
 
这是一个通过我决定的点的多段线的报告,我希望我现在可以给你更多的例子,我在工作,我在思考如何使它从清晨!!!

Tharwat 发表于 2022-7-6 08:15:47

我的版本和我的方式。。。。
 

(defun c:Test (/ entities i number integer layers lst object point1
            point2 result selectionset selectionsetname singlelayer
             )
;;; Tharwat 15. May. 2012 ;;;
(if (and (setq point1 (getpoint "\n Specify first point :"))
          (setq point2 (getpoint point1 "\n Specify Second point :"))
          (setq selectionset
               (ssget "_F"
                        (list point1 point2)
                        '((0 . "LINE,*POLYLINE"))
               )
          )
   )
   (progn
   (repeat (setq integer (sslength selectionset))
       (setq entities (cons (setq selectionsetname
                                 (ssname
                                     selectionset
                                     (setq integer (1- integer))
                                 )
                            )
                            entities
                      )
       )
       (if (not (member (setq singlelayer
                               (cdr (assoc 8 (entget selectionsetname)))
                        )
                        layers
                )
         )
         (setq layers (cons singlelayer layers))
       )
   )
   (setq i 0)
   (foreach layer layers
       (repeat (setq number (length entities))
         (if
         (eq
             (cdr
               (assoc 8
                      (entget (nth (setq number (1- number)) entities))
               )
             )
             layer
         )
            (setq lst (cons layer (setq i (1+ i))))
         )
       )
       (setq result (cons lst result))
       (setq i 0)
   )
   )
)
(foreach one (reverse result)
   (print one)
)
(textpage)
(princ)
)

Tharwat 发表于 2022-7-6 08:17:19

这张桌子更好。
 
(defun c:Test (/ entities i number integer layers lst object point1 p
            height point2 result selectionset selectionsetname
            singlelayer model table r c inc
             )
(vl-load-com)
;;; Tharwat 15. May. 2012 ;;;
(if (and (setq point1 (getpoint "\n Specify first point :"))
          (setq point2 (getpoint point1 "\n Specify Second point :"))
          (setq selectionset
               (ssget "_F"
                        (list point1 point2)
                        '((0 . "LINE,*POLYLINE"))
               )
          )

          (setq p (getpoint "\n Table insertion point :"))
   )
   (progn
   (setq height (if (zerop (cdr (assoc 40
                                       (setq st
                                                (entget
                                                (tblobjname "STYLE" (getvar 'textstyle))
                                                )
                                       )
                                  )
                           )
                      )
                  (cdr (assoc 42 st))
                  (cdr (assoc 40 st))
                  )
   )
   (repeat (setq integer (sslength selectionset))
       (setq entities (cons (setq selectionsetname
                                 (ssname
                                     selectionset
                                     (setq integer (1- integer))
                                 )
                            )
                            entities
                      )
       )
       (if (not (member (setq singlelayer
                               (cdr (assoc 8 (entget selectionsetname)))
                        )
                        layers
                )
         )
         (setq layers (cons singlelayer layers))
       )
   )
   (setq i 0)
   (foreach layer layers
       (repeat (setq number (length entities))
         (if
         (eq
             (cdr
               (assoc 8
                      (entget (nth (setq number (1- number)) entities))
               )
             )
             layer
         )
            (setq lst (cons layer (setq i (1+ i))))
         )
       )
       (setq result (cons lst result))
       (setq i 0)
   )
   (setq model (vla-get-modelspace
                   (vla-get-activedocument (vlax-get-acad-object))
               )
   )
   (setq table (vla-addtable
                   model
                   (vlax-3d-point p)
                   (1+ (length result))
                   2
                   (* height 2.)
                   (* height 10.)
               )
   )
   (vla-settext table 0 0 "Section A - B")
   (setq r   0
         c   0
         inc -1
   )
   (repeat (length result)
       (vla-settext
         table
         (setq r (1+ r))
         c
         (car (nth (setq inc (1+ inc)) result))
       )
       (vla-settext
         table
         r
         (setq c (1+ c))
         (itoa (cdr (nth inc result)))
       )
       (setq c 0)
   )
   )
)
(princ)
)

fixo 发表于 2022-7-6 08:22:11

除第一个代码外:

(defun c:LineCount ( / a acsp adoc b col cols i ip l num p q row rows s tbl tmp)
(vl-load-com)
(if
(and
(setq p (getpoint "\nPick 1st Point: "))
(setq q (getpoint "\nPick 2nd Point: " p))
)
(if (setq s (ssget "_F" (list p q) '((0 . "*LINE"))))
(progn
(repeat (setq i (sslength s))
(setq a (cdr (assoc 8 (entget (ssname s (setq i (1- i)))))))
(if (setq b (assoc a l))
(setq l (subst (list a (1+ (cadr b))) b l))
(setq l (cons (list a 1) l))
)
)

(setq adoc (vla-get-activedocument (vlax-get-acad-object))
acsp (vla-get-block (vla-get-activelayout adoc))
)
(setq l (vl-sort l '(lambda ( a b ) (< (cadr a) (cadr b)))))
(setq l (mapcar 'reverse l))
(setq ip (getpoint "\nPick table position: "))
(setq tbl (vlax-invoke acsp 'addtable ip (+ (length l) 1) (length (car l)) 25.0 250.0))

(vla-put-regeneratetablesuppressed tbl :vlax-true)

(vla-settext tbl 0 0 "Section \\C3;A-B")

(setq row 1)
(setq num (length l))

(setq cols (length (car l)))

(foreach x l
(setq tmp (car l))
(setq col 0)
(while (< col cols)
(vla-settext tbl row col (nth col x))
(setq col (1+ col))
)
(setq row (1+ row))
)

(setq rows (vla-get-rows tbl))

(vla-settextheight tbl actitlerow 20)

(vla-settextheight tbl (+ acheaderrow acdatarow) 15)

(vla-setcolumnwidth tbl 0 50.)

(vla-setcolumnwidth tbl 1 150.)

(vla-put-regeneratetablesuppressed tbl :vlax-false))
)
(princ "\nNo lines found between selected points.")
)
(princ)
)

 
~'J'~

Michalis 发表于 2022-7-6 08:25:29

我比你想象的要大
我加载了代码,但我不知道如何在命令行中使用它,我从defun C编写测试:测试,但没有这样的命令,我应该如何运行它?
 
谢谢你们的帮助,你们都很坚强,我希望我也能为你们做点什么,
 

Tharwat 发表于 2022-7-6 08:27:26

在命令行键入Vlide,然后从该应用程序启动一个新文件,然后复制代码并将其粘贴到新文件中,然后将文件保存在您想要的位置,然后返回Autocad并键入命令appload,然后选择刚刚保存的文件,当您完成键入test以启动例程时
页: [1] 2
查看完整版本: 我需要一些帮助,创建选项卡