什么是正确的命令?
(defun c:pline-coor ( / *error* data-lst sorted-lst str-lst top-str polys
data cnt obj file-nm tmp item tmp-str fl)
(defun *error* (msg)
(if(= msg "quit / exit abort")
(princ "\nNo output file was selected")
(princ msg)
)
)
(setq top-str ""
file-nm (getfiled "Output File" "" "doc" 1)
)
(if(null file-nm)(exit))
(if(setq polys(ssget '((0 . "*POLYLINE"))))
(repeat(setq cnt(sslength polys))
(setq obj (vlax-ename->vla-object
(ssname polys
(setq cnt(1- cnt))
)
)
data-lst (cons
(list(vlax-get obj 'Layer)
(vlax-get-property obj 'Coordinates)The problem line!!
)
data-lst
)
)
)
)
(while data-lst
(setq data (car data-lst)
data-lst (cdr data-lst)
tmp (list data)
)
(foreach item data-lst
(if(=(car item)(car data))
(setq tmp (cons item tmp)
data-lst (vl-remove item data-lst)
)
)
)
(setq sorted-lst(cons tmp sorted-lst))
)
(setq sorted-lst
(vl-sort sorted-lst '(lambda(a b)(<(caar a)(caar b))))
)
(foreach item (reverse sorted-lst)
(setq top-str
(strcat(caar item)"," top-str)
)
)
(setq str-lst (cons top-str str-lst)
cnt 0
)
(repeat(apply 'max(mapcar 'length sorted-lst))
(setq tmp-str "")
(foreach item (reverse sorted-lst)
(setq tmp-str
(if(setq tmp(nth cnt item))
(strcat(rtos(cadr tmp)) "," tmp-str)
(strcat "," tmp-str)
)
)
)
(setq cnt (1+ cnt)
str-lst (cons tmp-str str-lst)
)
)
(if(setq fl(open file-nm "w"))
(progn
(foreach str (reverse str-lst)
(write-line str fl)
)
(close fl)
(alert(strcat file-nm " was created"))
)
(alert "Unable to create file")
)
(princ)
)
总之,这一行:
(defun vex-plverts(ent / retn listy retDum add1 add2);
(vl-load-com)
(if (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
(progn
(setq retn nil listy (vlax-safearray->list (vlax-variant-value (vla-get-coordinates (vlax-ename->vla-object ent)))))
(while (and (setq var1 (car listy)) (setq var2 (cadr listy)))
(setq retn (append retn (list (list var1 var2 0))))
(setq listy (cddr listy)))
)
)
retn
); Returns a list of 3D coordinates defining the vertices of a polygon
现在是:
(vlax-get-property obj 'Coordinates)The problem line!!
这已经足够了。
(vex-plverts (ssname polys cnt))
目标是将顶点X,Y+layername的值并排导出到DOC或txt,如下所示;
原始样品;
交换
(vlax get property obj’Coordinates)问题线!!
为此;
(vlax get obj’区域)
对于take value area+layername,效果良好
使用文档的提示:
必须将“,”更改为“^t”以将零件号粘贴到excel中。a在excel中创建新的特殊粘贴
使用选项Transpor将行到列的信息更改为更好的查看器。
目标是X,Y+层名称
感谢您的支持
我不知道我做得是否正确,但我在命令行中得到了一些与此相关的结果
“(vex plverts(ssname polys cnt))”
但没有层名称。。。 听起来不错,直到你对已经编写的代码进行“否定”后,它才会返回层名称。。。 谢谢你的帮助,Commandobill,很抱歉我的无知,但我想用代码做‘cons’,但我用它实现了自我。
我认为这会更容易。 因为我反对重写东西,几年前我从李那里偷了这个。您的代码似乎按顺序对点进行排序,但您没有说您需要它。如果你这样做,我也可以把它放在这里。
;;多段线顶点导出器~ Lee McDonnell ~ 26.11.2009(defun c:pExp(/ss tmp i j ent tot dis pt)(vl load com)(if(and(and(setq ss(ssget’((0.*Polyline)))(setq tmp(getfield“Output File”(cond(*load)(”“)”txt;csv“9))(progn(setq*load tmp tmp(open tmp“a”)i-1)(write line“X,Y,Layer”tmp)(while(setq ent(ssname ss(setq i(1+i))))))(No.dll setq tot 0.j(1-(vlax曲线getStartParam ent)))(而( 哦,那个新的我在我的故事里得到了不同的版本。非常相似,只是需要更改层的“距离”非常好,我会试试。
不幸的是,像PtManagerV2-4这样的伟大工具。lsp和Geo_Export_v2_6。VLX没有给出这种可能性。
非常感谢您的帮助,新的Commandobill先生!!!
;;多段线顶点导出器~ Lee McDonnell ~ 27.11.2009(defun c:pExp(/*error*ObjRel ss col row ent tot j pt)(vl load com)(defun*error*(e)(ObjRel(list xlApp xlCells))(或(wcmatch(strcase)“*BREAK,*CANCEL*,*EXIT*”)(princ(strcat“\n**error:”e“**”))(princ))(defun ObjRel(lst)(mapcar(function)(lambda(x)(if(and(eq(type x)'VLA-OBJECT)(not(vlax-object-released-p x))(vl catch all apply“vlax release object(list x 107;а)а”)lst)(if(setq i-1 ss(ssget’((0.*POLYLINE”)))(progn(setq xlApp(vlax get or create object“Excel.Application”)xlCells(vlax get property(vlax get property)(vlax get property(vlax invoke方法(vlax get property xlApp“Workbooks”)“Add”)“Sheets”)“Item”1“Cells”)第0列第1行(mapcar(函数(lambda(x)(vlax put property xlCells“Item”行(setq col(1+col))x))'(“x”“Y”“Z”点“Distance”“Total”)(while(setq ent(ssname ss(setq i(1+i))))(setq tot 0.row(1+row)j(1-(vlax curve getStartParam ent)))(while(
页:
1
[2]