我参考的是这篇老外的帖子,原文不再翻译,有兴趣的可以百度自己查看

Q1:根据图面三角网内插方格网节点高程(LISP)

;;框选范围内交点插入图块  By Gu_xl 2011.04

;;双线性内插计算内插高程值

(defun zInsert (ptl / L pt0 pt0x pt0y pt1 pt2 pta ptb ptc ptz r xa xb xc ya yb yc za zb zc zl zr)

(setq pt0  (car ptl)

pt0X (car pt0)

pt0Y (cadr pt0)

pt1  (polar (list pt0X pt0Y) 0 1000)

pt2  (polar (list pt0X pt0Y) pi 1000)

ptA  (car (cadr ptl))

Xa (car ptA)

Ya (cadr ptA)

Za (caddr ptA)

ptB  (cadr (cadr ptl))

Xb (car ptB)

Yb (cadr ptB)

Zb (caddr ptB)

ptC  (caddr (cadr ptl))

Xc (car ptC)

Yc (cadr ptC)

Zc (caddr ptC)

)

;求交点

(setq L (inters pt1 pt2 (list Xa Ya) (list Xb Yb)))

(cond

((/= L nil)

(setq zL (+ Za (/ (* (- Zb Za) (- (car L) Xa)) (- Xb Xa))))

)

((= L nil)

(progn

(setq L (inters pt1 pt2 (list Xb Yb) (list Xc Yc)))

(setq zL (+ Zb (/ (* (- Zc Zb) (- (car L) Xb)) (- Xc Xb))))

)

)

)

(setq R (inters pt1 pt2 (list Xa Ya) (list Xc Yc)))

(cond

((/= R nil)

(setq zr (+ Za (/ (* (- Zc Za) (- (car R) Xa)) (- Xc Xa))))

)

((= R nil)

(progn

(setq R (inters pt1 pt2 (list Xb Yb) (list Xc Yc)))

(setq zr (+ Zb (/ (* (- Zc Zb) (- (car R) Xb)) (- Xc Xb))))

)

)

)

(setq ptZ (+ zL (/ (* (- zr zL) (- pt0X (car L))) (- (car R) (car L)))))

(list pt0X pt0Y ptZ)

)

;;;by Gu_xl

(defun gxl-cs:gcd (inspt height  scale  / pt  pt1 blkdef obj)

(setvar “CMDECHO” 0)

(command “layer” “m” “检查高程点” “c” “1” “” “L” “CONTINUOUS” “”  “”)

(if height

(setq height (rtos height 2 3))

(setq height “”)

)

(regapp “SOUTH”)

;;;检查字体 “HZ” 是否存在

(if (not (tblobjname “style” “HZ”))

(command “style” “HZ” “rs.shx,hztxt.shx” 0 1 0 “” “” “”)

)

;;;检查是否存在高程点图块定义

(if (not (tblobjname “block” “GC200”))

(progn

(setq blkdef (vla-Add (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3D-point ‘(0 0 0)) “GC200”))

(setq obj

(vla-AddPolyline

blkdef

(vlax-make-variant

(vlax-safearray-fill

(vlax-make-safearray vlax-vbdouble (cons 0 5))

‘(-0.2 0 0 0.2 0 0)

)

)

)

)

(vla-SetBulge obj 0 1) (vla-SetBulge obj 1 1)

(vla-put-Closed obj :vlax-true)

(vla-put-ConstantWidth obj 0.4)

)

)

;;;插入块

(entmake (list

‘(0 . “INSERT”)

‘(100 . “AcDbEntity”)

‘(100 . “AcDbBlockReference”)

‘(66 . 1);;;属性跟随标志,1跟随,0不跟随

(cons 2 “GC200”)

(cons 10 inspt)

(cons 41 scale)

(cons 42 scale)

(cons 43 scale)

‘(-3 (“SOUTH” (1000 . “202101”)))

)

)

;;;插入属性

(entmake (list

‘(0 . “ATTRIB”)

‘(100 . “AcDbEntity”)

‘(100 . “AcDbText”)

(cons 10 (setq pt (polar inspt (* -0.5 PI) (* 1.8 scale))))

(cons 40 (* 2.0 scale))

(cons 50 0)

(cons 62 3)

(cons 41 0.8)

(cons 51 0)

(cons 1 height)

(cons 7 “宋体”)

(cons 72 0)

(cons 11 pt)

‘(100 . “AcDbAttribute”)

(cons 2 “height”)

(cons 70  0)

(cons 74 2)

)

)

;;;;;;;;;;;;;;;;;;;;;;;

;;;插入属性

;;;结束标志

(entmake ‘((0 . “SEQEND”)))

(princ)

)

(defun addgcptinpm (pt lst / an anl i L n p1 p2 plst ret vlst)

(setq n 0 L (length lst))

(while (< n L)

(setq vlst (car lst))

(setq i -1

p1 (last vlst)

)

(while (and (not ret) (setq p2 (nth (setq i (1+ i)) vlst)))

(cond

((equal p2 pt 1e-4) (setq ret t))

(t

(setq an (- (angle pt p1) (angle pt p2)))

(if (equal pi (abs an) 1e-4)

(setq ret t)

(setq anl (cons (rem an pi) anl))

)

)

)

(setq p1 p2)

)

(cond

(ret (setq plst (list pt vlst))) ;线上;

(t

(if (equal pi (abs (apply ‘+ anl)) 1e-4)

(setq plst (list pt vlst)) ;三角网内

nil ;外

)

)

)

(setq n (1+ n))

(setq lst (cdr lst))

(if plst (setq n L))

)

plst

)

;[功能] pline,lwpline点坐标表  By 无痕;;示例(vxs (car (entsel))),返回三维点坐标

(defun vxs (e / i v lst)

(setq i 0)

(while

(setq v (vlax-curve-getpointatparam e (setq i (1+ i))))

(setq lst (cons v lst))

)

(reverse lst))

;;;计算曲线交点

(defun Curveinters (en1 en2 / pl pts)

(setq pl  (vlax-invoke (vlax-ename->vla-object en2) ‘IntersectWith (vlax-ename->vla-object en1) acExtendNone))

(while pl

(setq pts (append pts (list (list (car pl) (cadr pl) (caddr pl))))

pl (cdr (cdr (cdr pl)))

)

)

pts

)

;;;曲线选择集交点

(defun ssinters (ss / pts en1 en2)

(while (> (sslength ss) 1)

(setq en1 (ssname ss 0))

(ssdel en1 ss)

(setq n (sslength ss))

(repeat n

(setq en2 (ssname ss (setq n (1- n))))

(setq pts (append pts (Curveinters en1 en2)))

)

)

pts

)

;;;实例: 按选择范围框内插入图块

(defun c:fgwgc(/ p1 p2 d minX minY maxX maxY pt pts p1 p2 ss os cmdecho blockname fff ssa cm en ii no wjm pzx ssa1 en1 ii1 no1 pzx1 ptb ptb1 sjwlst blc scale)

(prompt “\n 请选择设计三角网:”)

(setq ssa (ssget ‘((0 . “POLYLINE”) (8 . “sjw”))))

(setq ii   0

no  0

)

(repeat (sslength ssa)

(setq en (ssname ssa ii)

ptb (vxs en)

pzx (append pzx (list ptb))

ii  (1+ ii)               )

; (setq pzx (list (car pt) (cadr pt) (caddr pt)))

)

(setq sjwlst pzx)

(setq blc (getint “\n请输入比例尺1:”))

(setvar ‘userr1 blc);设置比例尺

;(setq zg (* 0.002 blc));字高

(setq scale (* 0.001 blc));缩放比例

(setq os (getvar “osmode”))

(setq cmdecho (getvar “cmdecho”))

(setvar “osmode” 0)

(setvar “cmdecho” 0)

;(setq blockname (getstring  “\n插入块名称:”))

(if (null d) (setq d 1.))

(while (and

(setq p1 (getpoint “\n选择插入范围左下角:”))

(setq p2 (GETCORNER p1 “\n选择插入范围左下角:”))

)

(setq minX (apply ‘min (mapcar ‘car (list p1 p2)))

minY (apply ‘min (mapcar ‘cadr (list p1 p2)))

maxX (apply ‘max (mapcar ‘car (list p1 p2)))

maxY (apply ‘max (mapcar ‘cadr (list p1 p2)))

)

(grvecs (list 1 (list minx miny) (list maxx miny)

1 (list maxx miny) (list maxx maxy)

1 (list maxx maxy) (list minx maxy)

1 (list minx maxy) (list minx miny)

)

)

(setq ss (ssget “c” p1 p2 ‘((0 . “lwpolyline”))))

(if ss

(progn

(setq pts (ssinters ss))

(if pts

(foreach pt pts

(if (and (>= maxX (car pt) minX)

(>= maxY (cadr pt) minY)

(setq ptlst (addgcptinpm pt sjwlst))

)

;;插入图块

;(command “insert” blockname “_non” pt 1 1 0)

(progn

;;双线性内插计算内插点的高程值 返回内插点(x y z)

(setq zpt (zInsert ptlst))

(print zpt)

;(Entmakegcd 插入点 高程 图块比例 属性 文字字符 文字插入点 小数位数)

;(Entmakegcd zpt (caddr zpt) Scale inserD Tag txt ist1 txth ist2 xsws)

(gxl-cs:gcd zpt (caddr zpt)  scale  );展高程点

)

);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

)

)

)

)

(princ “\n 回车键结束“)

)

(setvar “osmode” os)

(setvar “cmdecho” cmdecho)

(princ)

)

Q2:思路

1、通过ssget函数,得到ABCDEFG点选择集m,

2、由ssname函数得到选择集m中第一点A(假设第一点是A),再从m选择集中找A点的最近点,得到B点(假如A点的最近点为B点),此时形成一条AB边。

3、将AB边左右两侧所有离散点CDEFG,分别与AB边连接形成三角形,判断形成的夹角哪个最大?得到最大夹角的那个三角形BCA(图中所示C点与AB边连接形成夹角最大,第一个三角形成,标示为1边),同时得到新边BC、CA,即1边

4、按逆时针方向,BC方向右侧离散点分别与BC边连接形成三角形,判断形成的夹角哪个最大?得到最大夹角三角形BFC(第二个三角形形成),同时得到新边BF、FC,即2边。

5、CA方向右侧离散点分别与CA边连接形成三角形,判断形成的夹角哪个最大?得到最大夹角三角CDA(第三个三角形形成),同时得到新边CD、DA,即2边。

6、此时图中所示的1边均以生成三角形,并得到多个新边2边,此时将1边排除,将2边做为1边,按以上45步骤操作,形成循环……,直到所有边都结束终止循环,形成三角网。

lisp的vla函数画矩形_利用Lisp做Tin三角网建模(源代码)相关推荐

  1. lisp的vla函数画矩形_难点解析丨反比例函数的图象和性质

    函数的相关知识作为每年各省市中考的热门考点问题,主要考察学生能否结合具体实际情境了解函数的相关的意义,能否正确画出相关函数的图象并理解相关函数的性质 其中反比例函数的考查形式主要是联系一次函数.二次函 ...

  2. lisp的vla函数画矩形_python之:tkinter画哆啦A梦

    痛苦啊!tkinter资料不是很多,学习了3天了,至今没找到官方文档,画arc时遇到了困难,不知道起始角度怎么写,找了好多地方都没有介绍,最终无意间找到了小甲鱼整理的文档,终于解决. 此外,tkint ...

  3. lisp的vla函数画矩形_AutoLISP反应器vlr-object-reactor函数应用

    AutoLISP反应器vlr-object-reactor函数应用,代码如下. (defun c:tt (/ line line_handle txt txt_line txt_line_reacto ...

  4. spss相关性分析看结果_利用spss做Pearson相关性分析步骤详解

    有蛮多的学生私信老徐问如何利用spss做相关性分析,其实相关性分析应该是spss分析中较为基础的一个功能应用,很多学生可能是因为跨专业或者对统计软件了解较少,在没有经过系统学习的前提下,感觉云里雾里. ...

  5. java爬取网页数据_利用Python做数据分析—对前程无忧数据类岗位进行分析

    引言 随着时代的发展,我国在各行各业都需要大量的人才引进,处于近几年最热门的行业也称"最火行业":大数据.数据分析.数据挖掘.机器学习.人工智能,这五门行业各有不同又互有穿插.近几 ...

  6. lisp用entmake生产圆柱体_使用lisp语言实现在平面图中自动画出桥梁的墩柱标识.doc...

    使用lisp语言实现在平面图中自动画出桥梁的墩柱标识.doc 还剩 5页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 使用 LISP 语言实现在平面图 ...

  7. python自定义函数画图_利用Python绘图和可视化(长文慎入)

    Python有许多可视化工具,但是我主要讲解matplotlib(http://matplotlib.sourceforge.net).此外,还可以利用诸如d3.js(http://d3js.org/ ...

  8. python 时间函数 毫秒_利用python进行播放音频与录音,骚操作!

    现如今,我们的学习知识的渠道越来越多,我们也要充分利用自己的感官去汲取知识.当我们看书累的时候,我们完全可以听过听书来学习,这样的平台也很多,pk 哥之前也写过关于下载喜马拉雅音频爬虫的方法:Pyth ...

  9. lisp 车位块自动编号_机械车位做产权登记,真的适合吗?

    为了更好地把握停车市场发展动向,给停车行业从业者提供一个发表观点.各抒己见的平台,共同促进停车行业的发展,<城市停车>开设热点版块,每期针对1-2个行业热点,广泛征集业内人士观点和看法. ...

最新文章

  1. 【勉强采用】反欺诈四大手段一秒get
  2. I00040 计算1000以内的勾股数
  3. Struts2学习总结三
  4. 你真的了解 Cookie 和 Session 吗?
  5. TextView 单行显示长文本
  6. Shell(Bash)中如何判断是否存在某个命令
  7. 【实验2】——模糊函数
  8. am335x mysql_Ubuntu下编译ARM平台QtEmbedded的MySQL和MySQL插件
  9. thymeleaf的url属性
  10. 开课吧:AI智能语言产品会运用到哪些技术?
  11. 如何在arcgis中制作土地利用转移矩阵
  12. 用C语言实现布丰投针计算圆周率问题
  13. python实现离散沃尔什变换_快速沃尔什变换(示例代码)
  14. 自学iOS开发系列----UI(视图编程入门:UIScrollView)
  15. ASP网页HTTP 错误 404.3 - Not Found解决方案
  16. SDCC 2017·深圳站八大不容错过的理由
  17. 全球及中国雾化铜和铜合金粉末行业产销需求及发展动态分析报告2022-2028年
  18. 4、网络层:三层物理设备:集线器、交换机、路由器【IP、ICMP、BGP、OSPF
  19. 字母数字特殊字符部分unicode对照表
  20. 《算法零基础100讲》(第42讲) 位运算 (位与) 入门

热门文章

  1. 八段锦八个动作名称_八段锦工间操“动”起来 全民健身精气神“燃”起来
  2. uniapp 即时通讯_uniapp与webview的实时通讯
  3. 使用sklearn预测走势_Prophet: 时间序列预测库
  4. zigbee的路由器能分配网络地址吗_家用无线路由器讲解
  5. python 2.7.11 linux,Python-2.7.11+Django-1.9.4安装配置
  6. ajax原理总结,Ajax原理
  7. mysql三高讲解(二)2.9: mysql示例数据库sakia database的使用
  8. java 栈的变量_深入Java核心:JVM中的栈和局部变量
  9. gds文件转bmp_OFD文件转换服务
  10. python中的作用域_python 模块的作用域