我需要一些帮助,创建选项卡
大家好,我是新来的,我需要一些帮助,
我想画一条线,(它是一种剖面),然后应该用多段线或带计数的线图层生成一个表,我已经用Mechanical using Section和dx完成了,但我需要用lisp更快,我可以用table或block,所以当我插入它时,应该需要第一个点,然后是第二个点,并在一个带计数的框中给我所有图层名称,
请原谅我的英语,
请参见下图 欢迎来到Cadtutor
这一节是关于什么的?它由什么组成?
如果你用英语展示表格,大家都会看得更清楚
你能上传那个部分的图纸吗?
你说得对,这是一个新的英文截图,
故事是这样的,
我为我使用的每根电缆使用层名称,例如,NYY 5x10mm2是层名称,NYY 5x10mm2也是,
根据我的图纸,从A-B中,我有许多电缆,9FTP Cat5 1NYY 5x10,1NYY 3x120+70+1x90mm2 2NYY 5x16等,因此,我想选择2点(A-B),例如,
第二幅图显示了所有通过2个点(模型空间)的线,所以现在我必须从一个检修孔到另一个检修孔,向工作现场的伙计们演示,并告诉他们管道将如何进行,
截面是一条简单的多段线,与其他多段线相交,
这应该让你开始:
(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)
)
)
喜欢它!
但是..!!:-)
如何在绘图时显示我选择的点?我想展示一下我从哪一点找到了这些数据?
这是一个通过我决定的点的多段线的报告,我希望我现在可以给你更多的例子,我在工作,我在思考如何使它从清晨!!! 我的版本和我的方式。。。。
(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)
)
这张桌子更好。
(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)
)
除第一个代码外:
(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'~ 我比你想象的要大
我加载了代码,但我不知道如何在命令行中使用它,我从defun C编写测试:测试,但没有这样的命令,我应该如何运行它?
谢谢你们的帮助,你们都很坚强,我希望我也能为你们做点什么,
在命令行键入Vlide,然后从该应用程序启动一个新文件,然后复制代码并将其粘贴到新文件中,然后将文件保存在您想要的位置,然后返回Autocad并键入命令appload,然后选择刚刚保存的文件,当您完成键入test以启动例程时
页:
[1]
2